我首先在当前正在开发的主应用程序中遇到了这种奇怪的行为。为了调试问题,我创建了一个测试应用程序。 测试应用程序只有一个活动 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>
由此,输出看起来像这样 图片1 现在,这不是我所期望的,请查看状态栏和工具栏如何合并在一起。
但是当我删除了这行代码
<item name="android:windowTranslucentNavigation">true</item>
这就是我最终得到的 请注意,这次工具栏和状态栏未合并,而是将状态栏放置在其下方。 我无法理解如何在状态栏中的图片1 中绘制布局
我知道这个问题会让许多阅读本书的人感到困惑。但是如何添加属性
<item name="android:windowTranslucentNavigation">true</item>
与状态栏无关的
我的测试设备正在android Pie
上运行答案 0 :(得分:0)
好的,经过一番研究,我发现
android:windowTranslucentNavigation=true
不仅使导航栏成为半透明,而且还允许布局在状态栏后面绘制绘图。
问题是,如果我们想要一个彩色的导航栏(用于Lollipop及更高版本)而不是半透明的,我们需要删除该行,这样我们将不再能够在状态栏后面绘制。
解决方法:
声明styles.xml(v21)并设置导航栏颜色
<item name="android:navigationBarColor">@color/red</item>
现在,由于此styles.xml文件仅用于API> = 21的设备,因此我们需要确保布局也绘制在API> = 21的状态栏后面,因此,请在活动的在 setContentView
之前 onCreateif(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),我们可以修改颜色导航栏而不会破坏用户界面