編集:私はこのコードAndroidのステータスバーの色、C++
ANativeActivity_setWindowFlags(PANativeActivity(System::DelphiActivity),
TJWindowManager_LayoutParams::JavaClass->FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS,
TJWindowManager_LayoutParams::JavaClass->FLAG_TRANSLUCENT_STATUS);
まだ
ないを使用して、現在のステータスバーの背景(およびナビゲーションバーのも誤ってバックグラウンド)を削除するために管理
これは動作しません新しい背景色
を追加する方法を知っている:
_di_JWindow androidWindow = SharedActivity()->getWindow();
androidWindow->setStatusBarColor(17170432);
=========================================== ====================
オリジナルのポスト:
私はFireMonkeyの/ RAD Studioで作られたAndroidアプリのステータスバーを色付けしようとしています。
#ifdef __ANDROID__
#include <FMX.Helpers.Android.hpp>
#include <Androidapi.JNIBridge.hpp>
#include <Androidapi.JNI.Os.hpp>
#include <Androidapi.JNI.JavaTypes.hpp>
#include <Androidapi.JNI.GraphicsContentViewText.hpp>
#include <Androidapi.JNI.Util.hpp>
#include <Androidapi.JNI.App.hpp>
#include <Androidapi.JNI.Embarcadero.hpp>
#include <Androidapi.Jni.hpp>
#endif
:私は、ヘッダー内のAndroid LIBSを含め、この
まずようにそれをやろうとしているRAD Studioでは
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));
:
は、私は通常、このコードを使用して、Javaでそれを達成するために、その後
私が呼んしようとしている:
JWindow androidWindow = JNativeActivity::getWindow();
は、私は次のような100以上のエラーを取得:
[bccaarm Error] HeaderFooterTemplate.cpp(67): call to non-static member function without an object argument
[bccaarm Error] HeaderFooterTemplate.cpp(67): variable type 'Androidapi::Jni::Graphicscontentviewtext::JWindow' is an abstract class
sysmac.h(327): unimplemented pure virtual method 'QueryInterface' in 'JWindow'
sysmac.h(328): unimplemented pure virtual method 'AddRef' in 'JWindow'
sysmac.h(329): unimplemented pure virtual method 'Release' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(763): unimplemented pure virtual method 'equals' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(764): unimplemented pure virtual method 'getClass' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(765): unimplemented pure virtual method 'hashCode' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(766): unimplemented pure virtual method 'notify' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(767): unimplemented pure virtual method 'notifyAll' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(768): unimplemented pure virtual method 'toString' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(769): unimplemented pure virtual method 'wait' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(770): unimplemented pure virtual method 'wait' in 'JWindow'
Androidapi.JNI.JavaTypes.hpp(771): unimplemented pure virtual method 'wait' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18831): unimplemented pure virtual method 'addContentView' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18832): unimplemented pure virtual method 'addFlags' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18833): unimplemented pure virtual method 'clearFlags' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18834): unimplemented pure virtual method 'closeAllPanels' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18835): unimplemented pure virtual method 'closePanel' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18836): unimplemented pure virtual method 'findViewById' in 'JWindow'
Androidapi.JNI.GraphicsContentViewText.hpp(18837): unimplemented pure virtual method 'getAllowEnterTransitionOverlap' in 'JWindow'
これはC++での私の最初のステップですので、私は、私はそれが右やっているかわかりません。
私は10.1でsetStatusBarColor()を使用できるようになりました。 次のコードは、(TJWindowManager_LayoutParams :: JavaClass-> FLAG_TRANSLUCENT_STATUS) 'ウィンドウ - > clearFlagsを動作しません;' それはそのviews.'に触れることができるビュー階層を作成した例外 'だけ元のスレッド を引き起こし 代わりに私は試みました: 'ANativeActivity_setWindowFlags(PANativeActivity(System :: DelphiActivity)、TJWindowManager_LayoutParams :: JavaClass-> FLAG ...' この段階で、ステータスバーの背景色が削除されました。透明で、ナビゲーションバーのように(残念ながら)、おそらく空白のActionBarが追加されます。 –
「オリジナルスレッドのみ」のエラーは、わかりやすいものです。 Android UIは、それらを作成するスレッドコンテキストに関連付けられています。スレッド境界を越えてUIオブジェクトにアクセスすることはできません。メインスレッドによって作成されたUIを操作しようとしているワーカースレッドがある場合は、その操作のメインスレッドに委任する必要があります。 –