我使用AppCompatDialogFragment
来显示BottomSheetDialog
。点击Navigation Bar
上的后退按钮可关闭BottomSheetDialog
。
我想将Navigation Bar
上的图标从后退按钮更改为'向下箭头'图标。默认情况下,这是在显示键盘时完成的,我想为底部工作表复制它。
要清楚,这就是我所拥有的:
这就是我需要的:
请注意,后退按钮是"向下箭头"。
导航栏是一个系统ui组件,我看不到改变它的外观的方式,看起来就像键盘可见时显示的导航栏。
答案 0 :(得分:9)
在Android O中,引入了更改图标的概念,但它仍然通过第三方应用程序。使用WRITE_SECURE_SETTINGS
更改图标的Custom Navigation Bar。
在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的图标和功能。
用于计算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;
}
您也可以通过adb
命令执行此操作,但请确保它可能会弄乱您的navigationBar
并且您无法取回原来的navigationBar
。
我希望它有所帮助。
答案 1 :(得分:4)
如前所述,它将在Android O中引入。
对于以前的版本,它仅适用于Android 3.x,或4.4+使用标记为SYSTEM_UI_FLAG_IMMERSIVE
,SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
,SYSTEM_UI_FLAG_HIDE_NAVIGATION
等。但仍然非常有限,付出很多努力,你得到的结果不是很友好甚至是不好意思。
原因是因为它是不可能的,因为它是一个安全问题。应用可能会阻止用户退出应用。
看看这些链接:
答案 2 :(得分:0)
This article非常清楚地描述了如何在Android Oreo中完成。