天天看點

Android 螢幕适配 - 設定底部虛拟菜單欄

 Android 手機現在越來越多的是全面屏/劉海屏,不止需要适配頭部的狀态欄,如有需要,可以參考: Android 螢幕适配 - 支援劉海屏

底部的虛拟菜單欄也需要适配,這裡拿小米9的機型來示例:預設是白底的,如果應用背景是其他顔色(比如黑色),是需要做下适配的;

如下示例:

Android 螢幕适配 - 設定底部虛拟菜單欄

是以我們可以簡單的适配一下,即設定它的顔色來起到适配的作用;

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