2017-08-16 14 views
23

AppCompatDialogFragmentを使用してBottomSheetDialogと表示しています。 Navigation Barの戻るボタンをクリックすると、BottomSheetDialogが閉じます。ナビゲーションバーの戻るボタンを矢印下に移動

Navigation Barのアイコンを戻るボタンから「下矢印」アイコンに変更したいとします。これは、キーボードが表示され、ボトムシートのためにそれを複製したいときに、デフォルトで行われます。

私が持っているもの、ここで、明確にする:

Current

そして、ここでは、私は必要なものです:バックボタンは "矢印ダウン" であることを

This is what I want

は注意。

ナビゲーションバーはsystem-uiコンポーネントであり、キーボードが表示されているときに表示されるナビゲーションバーのように外観を変更する方法はありません。

+0

キーボードが開いているときだけ、矢印が表示されます。あなたはユースケースを持っていますか?それはちょうど欲望なのであれば、あなたが言うこともできるから* "私はホームボタンの代わりに8角形をしたい" *。あなたは悪い男の子であり、ルールを破ることを望んでいます。つまり、矢印がどのような場合に矢印が下になるかをユーザーが確かに知っており、そこに根本的な変更を導入したいと思っています。プラットフォーム全体で一貫しています。 – azizbekian

+3

@azizbekian私は 'BottomDialog'を表示するときに、矢印ダウンを表示したいと思います。戻るボタンをクリックすると、「BottomDialog」は下にスライドすることによって解除され、古典的な戻るボタンの代わりに矢印を表示するのが理にかなっています。 – Vlad

+0

@azizbekian APIを使用すると、戻るボタンの動作を変更できるので、関連するアイコンを変更することができます。 – ben75

答えて

8

アンドロイドでは、アイコンを変更するというコンセプトが導入されていますが、まだサードパーティーのアプリを通じて行われています。アイコンを変更するのにWRITE_SECURE_SETTINGSを使用するCustom Navigation Bar Android Oでは、明るいテーマや暗いテーマなどのバーの表示を変更できます。

解決策2は、より多くの助けになります。 ナビゲーションバーにpopup windowを作成することができます。希望するレイアウト、つまり3つ前のボタン、最近のアプリとホームボタンがあります。このようにして、戻るボタンアイコンをそれに応じて変更することができます。ポップアップウィンドウがナビゲーションバーと同じ高さになっていることを確認し、自宅や最近のアプリのための独自の機能を作成してfunctionBottomSheetDialogを閉じてそのポップアップウィンドウを閉じることができます。

以下は、ホームキーと最近のAppsのコードです。戻るボタンのためにあなた自身のアイコンで達成したいことをそれに応じて行います。

ホームボタン用。

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 

最新のアプリケーションの場合// BottomSheetDialogを閉じるのあなたのアイコンと機能を使用するBACKボタン については

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); 

adbコマンドによって、あなたもそれを行うことができますnavigationBar

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; 
} 

の高さを計算するための

それが台無しにできることを確認あなたのnavigationBar、あなたがあなたの元navigationBarを取り戻すことはできません。

私はそれが役に立ちそうです。

+0

「ポップアップウィンドウ」を「ナビゲーションバー」の上に配置するにはどうすればよいですか?私はアプリケーションを没入型モードに設定しなければならないのですか? – Vlad

+0

https://stackoverflow.com/a/34595261/6761707これをチェックすると、Gravity.TOPの代わりに@Vladを正確に作成する方法がわかります。gravity.BOTTOMを使用し、透明な独自の色の代わりに使用します。そして最後に...あなたのcustomViewGroupを持っているときに、これらのボタンをクリックしてクリックイベントに追加します。 ありがとう私はそれを望むありがとう私はそれを助け、あなたのために働く場合upVoteを行う – Sahil

+0

また、あなたのBottomNavigationViewを使用し、上のコメントの答えを使用してNavgationBarに追加されていることを確認することができます。再度、感謝します – Sahil

4

すでに答えとして、それはAndroidのO.で導入されます

それは、Android 3.xのためにのみ可能です以前のバージョンでは

、または4.4以降など、SYSTEM_UI_FLAG_HIDE_NAVIGATIONSYSTEM_UI_FLAG_LAYOUT_FULLSCREENSYSTEM_UI_FLAG_IMMERSIVEとしてフラグを使用してしかし、依然として非常に限られており、多くの努力を払っても、あまりフレンドリーではないし、不自由な人もいます。

セキュリティ上の問題があるため、できないためです。アプリは、ユーザーがアプリを終了するのを防ぐことができます。これらのリンクで

ルック:

0

This articleは非常によく、それがAndroidのオレオで行うことができる方法を説明します。

関連する問題