我首先在我的主应用程序中遇到了这种奇怪的行为,目前正在开发中。为了调试问题,我创建了一个测试应用程序。测试应用程序只有一个活动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 1现在这不是我所期望的,看看状态栏和工具栏是如何合并在一起的。
但是当我删除这行代码时
<item name="android:windowTranslucentNavigation">true</item>
这就是我最终使用注意这次工具栏和状态栏没有合并,而是我们有状态栏和它下面的工具栏。我无法理解在图像1中如何在状态栏下绘制布局
我知道这个问题会让很多人对此感到困惑。但是如何添加属性呢
<item name="android:windowTranslucentNavigation">true</item>
与状态栏无关的正在影响它。
我的测试设备在android Pie上运行
好的,经过一番研究后我发现了
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),我们可以修改导航栏的颜色而不会破坏用户界面