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