代码之家  ›  专栏  ›  技术社区  ›  Ashutosh Patoa

“意外行为”android:windowTranslucentNavigation”

  •  0
  • Ashutosh Patoa  · 技术社区  · 5 年前

    我第一次在我正在开发的主应用程序中遇到这种奇怪的行为。为了调试这个问题,我创建了一个测试应用程序。 活动 这次活动的主题是 AppTheme.NoActionBar操作栏 声明于 样式.xml

        <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 1 图1 现在这不是我所期望的,看看状态栏和工具栏是如何合并在一起的。

    但当我删除这行代码时

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

    Image 2 请注意,这次工具栏和状态栏没有合并,而是将状态栏放置到位,工具栏位于其下方。 图1 正在状态栏下绘制布局

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

    <

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

    我的测试设备运行在android上

    0 回复  |  直到 5 年前
        1
  •  0
  •   Ashutosh Patoa    5 年前

    经过一番研究我发现

    android:windowTranslucentNavigation=true
    

    .

    问题是,如果我们想有一个彩色的导航栏(棒棒糖和更高的)而不是半透明的,我们需要删除这条线,这样我们就不能画后面的状态栏了。

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

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

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