Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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:windowTranslucentNavigation“;_Android_Xml_Android Styles - Fatal编程技术网

“的意外行为”;android:windowTranslucentNavigation“;

“的意外行为”;android:windowTranslucentNavigation“;,android,xml,android-styles,Android,Xml,Android Styles,我第一次在我目前正在开发的主应用程序中遇到这种奇怪的行为。为了调试这个问题,我创建了一个测试应用程序。 测试应用程序只有一个活动main活动,它扩展了活动。 此活动的主题是styles.xml中声明的AppTheme.NoActionBar @颜色/原色 @颜色/原色暗 @颜色/颜色重音 #FFFFFF 真的 真的 假的 使用此选项,输出看起来像下图1 现在这不是我所期望的,看看状态栏和工具栏是如何合并在一起的 但是当我删除这行代码时 <item name="android:windo

我第一次在我目前正在开发的主应用程序中遇到这种奇怪的行为。为了调试这个问题,我创建了一个测试应用程序。 测试应用程序只有一个活动main活动,它扩展了活动。 此活动的主题是styles.xml中声明的AppTheme.NoActionBar


@颜色/原色
@颜色/原色暗
@颜色/颜色重音
#FFFFFF
真的
真的
假的
使用此选项,输出看起来像下图1 现在这不是我所期望的,看看状态栏和工具栏是如何合并在一起的

但是当我删除这行代码时

<item name="android:windowTranslucentNavigation">true</item>
true
这就是我的结局 请注意,这次工具栏和状态栏没有合并,而是将状态栏放在适当的位置,并将工具栏放在其下方。 我无法理解在图像1中如何在状态栏下绘制布局

我知道这个问题会让很多读这篇文章的人感到困惑。但是如何添加属性呢

<item name="android:windowTranslucentNavigation">true</item>
true
这与状态栏无关,它正在影响它


我的测试设备运行在android上,所以经过一番研究后,我发现

android:windowTranslucentNavigation=true
不仅使导航栏半透明,还允许布局在状态栏后面绘制

问题是,如果我们想要有一个彩色的导航栏(用于棒棒糖和更高版本),而不是半透明的,我们需要删除该行,这样我们就无法再在状态栏后面绘制

解决方法:

声明styles.xml(v21)并设置导航栏颜色

<item name="android:navigationBarColor">@color/red</item>
结论: 对于设备(API<21),android:windowTranslucentNavigation=true将使导航栏半透明,布局将绘制在状态栏后面,对于设备(API>=21),我们可以修改导航栏的颜色而不破坏UI

<item name="android:navigationBarColor">@color/red</item>
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) // Checks the API level of the device
{
    getWindow()
              .getDecorView();
              .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
                                     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}