Android 在导航栏中将“后退”按钮更改为向下箭头
我正在使用一个Android 在导航栏中将“后退”按钮更改为向下箭头,android,controls,navigationbar,Android,Controls,Navigationbar,我正在使用一个AppCompatDialogFragment来显示一个BottomSheetDialog。单击导航栏上的后退按钮关闭底部表单对话框 我想将导航栏上的图标从“后退”按钮更改为“向下箭头”图标。当显示键盘时,默认情况下会执行此操作,我希望在底部工作表中复制它 要明确的是,这里是我所拥有的: 我需要的是: 请注意,后退按钮是一个“向下箭头” 导航栏是一个系统ui组件,我看不到改变其外观的方法,使其看起来像键盘可见时显示的导航栏。在android O中引入了更改图标的概念,但它仍然是
AppCompatDialogFragment
来显示一个BottomSheetDialog
。单击导航栏上的后退按钮
关闭底部表单对话框
我想将导航栏上的图标从“后退”按钮更改为“向下箭头”图标。当显示键盘时,默认情况下会执行此操作,我希望在底部工作表中复制它
要明确的是,这里是我所拥有的:
我需要的是:
请注意,后退按钮是一个“向下箭头”
导航栏是一个系统ui组件,我看不到改变其外观的方法,使其看起来像键盘可见时显示的导航栏。在android O中引入了更改图标的概念,但它仍然是通过第三方应用程序实现的。使用WRITE\u SECURE\u设置
更改图标。
在Android O中,您可以更改工具栏的显示,即亮主题或暗主题
解决方案2对您的帮助更大。
您可以在导航栏上创建一个带有所需布局的弹出窗口
,即3个按钮“后退”、“最近的应用程序”和“主页”按钮。通过这种方式,您可以相应地更改后退按钮图标。确保弹出窗口与导航栏的高度相同,然后您可以为家庭和最近的应用程序创建自己的功能,在后面的function
中,您可以关闭BottomSheetDialog
并删除该弹出窗口
以下是home key和最近的应用程序的代码。对于“后退”按钮,请相应地使用您自己的图标实现您想要实现的目标
用于主页按钮
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
命令执行此操作,但请确保它会弄乱您的导航栏
,并且您无法取回原始的导航栏
我希望它能有所帮助。如前所述,它将在Android O中引入
对于以前的版本,只有Android 3.x或4.4+可以使用标志,如SYSTEM\u UI\u FLAG\u IMMERSIVE
,SYSTEM\u UI\u FLAG\u LAYOUT\u FULLSCREEN
,SYSTEM\u UI\u FLAG\u HIDE\u NAVIGATION
等。但仍然非常有限,付出了大量的努力,您得到的结果不是很友好,甚至不是很流畅
原因是因为它不可能,因为它是一个安全问题。应用程序可能会阻止用户退出应用程序
请看以下链接:
非常好地描述了如何在Android Oreo中完成此操作。只有在打开键盘时才会显示向下箭头。我很好奇你有什么用例?因为如果这只是一个愿望,那么你也可以说“我想要一个八角形而不是主按钮”。你想成为一个坏孩子,打破规则,这意味着用户肯定知道在什么情况下箭头会变成向下箭头,你想在那里引入根本性的改变,这显然是谷歌不允许的,因为UX应该在整个平台上保持一致。@azizbekian我想在显示底部对话框时显示向下箭头。单击“后退”按钮时,向下滑动将关闭底部对话框
,向下显示箭头而不是传统的后退按钮是有意义的。@azizbekian API允许您更改后退按钮的行为,因此,允许您更改关联的图标是有意义的。您可能可以将底部对话框包装在自定义键盘布局中,但您确定,您希望在。。。只是为了一个箭头?将您的活动设置为,并按您想要的方式布局硬件按钮。您甚至可以重建状态栏。如何将弹出窗口
定位在导航栏
的顶部?我是否必须将我的应用程序设置为沉浸式模式?检查此项,您将知道如何准确地将其设置为@Vlad而不是Gravity.TOP使用Gravity.BOTTOM,而不是透明的您自己的颜色。最后…让customViewGroup添加这些按钮并单击事件。谢谢,我希望它能帮上忙,如果它对你有用,你也可以使用你的BottomNavigationView,并确保使用上面的评论答案将它添加到导航栏上。再次感谢这一点都不相关。问题是关于在android studio中更改后退按钮图标