Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在导航栏中将“后退”按钮更改为向下箭头_Android_Controls_Navigationbar - Fatal编程技术网

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中更改后退按钮图标