Android 手机现在越来越多的是全面屏/刘海屏,不止需要适配头部的状态栏,如有需要,可以参考: Android 屏幕适配 - 支持刘海屏
底部的虚拟菜单栏也需要适配,这里拿小米9的机型来示例:默认是白底的,如果应用背景是其他颜色(比如黑色),是需要做下适配的;
如下示例:
所以我们可以简单的适配一下,即设置它的颜色来起到适配的作用;
这里Android有提供方法:android:navigationBarColor/ setNavigationBarColor(@ColorInt int color)
xml:
<item name="android:navigationBarColor">@color/colorBackground</item>
activity:
getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.colorBackground))
这里的处理分两步:
1. 在style中设置底部虚拟菜单栏的默认背景色:
// manifest中的 application - android:theme:
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme.NoActionBar">
// 对于 @style/AppTheme.NoActionBar:
<style name="AppTheme.NoActionBar">
<!-- 设置默认的颜色 -->
<item name="android:navigationBarColor">@color/colorBackground</item>
</style>
2. 在BaseActivity中再处理一下其他背景色的页面:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 根据不同的页面去设置不同的颜色
if (isNavigationBarColorWhite()) {
window.navigationBarColor = ContextCompat.getColor(this, R.color.colorWhite)
}
setContentView(activityProperties.layoutResID)
init()
}
fun Activity.isNavigationBarColorWhite(): Boolean {
return mutableListOf(WelcomeActivity::class.java.simpleName).any {
this::class.java.simpleName == it
}
}