AppCompatDialogFragment
を使用してBottomSheetDialog
を表示しています。 Navigation Bar
の戻るボタンをクリックすると、BottomSheetDialog
が閉じます。
Navigation Bar
のアイコンを戻るボタンから「下矢印」アイコンに変更したい。これは、キーボードが表示されているときにデフォルトで実行され、ボトムシートに複製したいと思います。
明確にするために、ここに私が持っているものがあります:
そして、これが私が必要とするものです:
戻るボタンは「下向き」であることに注意してください。
ナビゲーションバーはシステムUIコンポーネントであり、キーボードが表示されているときに表示されるナビゲーションバーのように表示を変更する方法がわかりません。
Android O)では、アイコンを変更するという概念が導入されていますが、それでもサードパーティのアプリを使用しています。 カスタムナビゲーションバーWRITE_SECURE_SETTINGS
を使用してアイコン。Android O)で、バーの表示、つまり明るいテーマまたは暗いテーマを変更できます。
ソリューション2は、より多くの助けになる可能性があります。ナビゲーションバーにpopup window
を作成して、希望のレイアウト(3つのボタンを戻す、最近のアプリ、ホームボタン)を設定できます。このようにして、それに応じて戻るボタンのアイコンを変更できます。ポップアップウィンドウの高さがナビゲーションバーと同じであることを確認してください。そうすれば、ホームアプリや最近のアプリ用に独自の機能を作成できます。function
の後ろでBottomSheetDialog
を閉じて、そのポップアップを削除できます。窓。
以下は、ホームキーと最近のアプリのコードです。戻るボタンについては、それに応じて、独自のアイコンで達成したいことを実行してください。
ホームボタン用。
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
最近のアプリの場合。
Class serviceManagerClass = Class.forName("Android.os.ServiceManager");
Method getService = serviceManagerClass.getMethod("getService", String.class);
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar");
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor());
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder });
Method clearAll = statusBarClass.getMethod("toggleRecentApps");
clearAll.setAccessible(true);
clearAll.invoke(statusBarObject);
戻るボタンの場合//アイコンとBottomSheetDialogを閉じる機能を使用します。
ナビゲーションバーの高さを計算するため
public static int getSoftButtonsBarSizePort(Activity activity) {
// getRealMetrics is only available with API 17 and +
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int usableHeight = metrics.heightPixels;
activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
int realHeight = metrics.heightPixels;
if (realHeight > usableHeight)
return realHeight - usableHeight;
else
return 0;
}
return 0;
}
adb
コマンドで実行することもできますが、navigationBar
を台無しにする可能性があり、元のnavigationBar
を取り戻すことができないことを確認してください。
お役に立てば幸いです。
すでに回答済みのとおり、Android Oで導入されます。
以前のバージョンでは、フラグをSYSTEM_UI_FLAG_IMMERSIVE
、SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
、SYSTEM_UI_FLAG_HIDE_NAVIGATION
などとして使用するAndroid 3.x、または4.4+でのみ可能です。限られた、多くの努力を払うと、あまり友好的ではなく、グリッチさえない結果が得られます。
それが不可能であるという理由は、セキュリティの問題であるためです。アプリは、ユーザーがアプリを終了できないようにする可能性があります。
これらのリンクを見てください:
この記事 は、Android Oreoでどのように実行できるかを非常によく説明しています。