“android:windowTranslucentNavigation”的意外行为

问题描述 投票:-1回答:1

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

    <style name="AppTheme">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

    <style name="AppTheme.NoActionBar" parent="AppTheme.Base">
        <item name="android:statusBarColor">#FFFFFF</item>
        <item name="android:windowTranslucentNavigation">true</item>
    </style>

    <style name="AppTheme.Base" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>

使用此输出看起来像这样Image 1Image 1现在这不是我所期望的,看看状态栏和工具栏是如何合并在一起的。

但是当我删除这行代码时

<item name="android:windowTranslucentNavigation">true</item>

这就是我最终使用Image 2注意这次工具栏和状态栏没有合并,而是我们有状态栏和它下面的工具栏。我无法理解在图像1中如何在状态栏下绘制布局

我知道这个问题会让很多人对此感到困惑。但是如何添加属性呢

<item name="android:windowTranslucentNavigation">true</item>

与状态栏无关的正在影响它。

我的测试设备在android Pie上运行

android xml android-styles
1个回答
0
投票

好的,经过一番研究后我发现了

android:windowTranslucentNavigation=true

导航栏不仅半透明,而且还允许布局在状态栏后面绘制绘图。

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

解决方法:

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

<item name="android:navigationBarColor">@color/red</item>

现在由于这个styles.xml文件仅用于API> = 21的设备,我们需要确保布局也是在API> = 21的状态栏后面绘制的,所以在setContentView之前在活动的onCreate中添加以下行

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

结论:对于设备(API <21),android:windowTranslucentNavigation = true将使导航栏保持半透明状态,并且将在状态栏后面绘制布局,对于设​​备(API> = 21),我们可以修改导航栏的颜色而不会破坏用户界面

© www.soinside.com 2019 - 2024. All rights reserved.