iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 9
0
Mobile Development

Android Kotlin開發 -小嫩雞的30篇精選筆記系列 第 9

Android x Kotlin : 全螢幕: 隱藏狀態欄與底部導覽欄、設定狀態欄底色

簡介

許多app為求美觀,會需要設定全螢幕,也就是自定義頂部狀態欄與底部導航欄,或將其隱藏進入沉浸模式。

先定義中英文對照:
頂部狀態欄 = statusBar
底部導航欄 = navigationBar

  • 將statusBar或navigationBar設為隱藏

//在可執行的地方(例如onCreate)中直接呼叫即可
//在fragment呼叫時需寫成activity.window
window.decorView.systemUiVisibility =                 
    View.SYSTEM_UI_FLAG_VISIBLE or                    
    
    //隱藏statusBar,點擊螢幕任意區域不會出現,需要從statusBar位置下拉才会出现
    View.SYSTEM_UI_FLAG_FULLSCREEN
    //將布局內容拓展並放到statusBar後面                      
    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or  
    
    //隐藏navigationBar,點擊螢幕任意區域,navigationBar將會重新出現,且不會自動消失。
    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
    //將布局内容拓展到navigationBar後面。
    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
    
    //進入沉浸模式,
    View.SYSTEM_UI_FLAG_IMMERSIVE or
    
    //進入沉浸模式,且navigationBar會變成半透明,且你上拉navigationBar後,它會自動消失回到沉浸模式。
    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

    //保持布局與statusBar穩定                        
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE or

  • 設定狀態欄底色

fun setStatusBar(activity:Activity,@ColorInt color: Int) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    
        
         //表示要渲染SYSTEM BAR
         activity.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
         //取消半透明設置  
         activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
         //設定狀態欄顏色
         activity.window.setStatusBarColor(color)

        if (isLightColor(color)) {
            // 如果亮色,設定狀態欄文字為黑色
            activity.window.getDecorView()
                .setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR)
        }
        else {
            activity.window.getDecorView()
                .setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE)
        }
    }
}

fun isLightColor(@ColorInt color: Int): Boolean {
    return ColorUtils.calculateLuminance(color) >= 0.5
}

參考資料

Android setSystemUiVisibility详解


上一篇
Android x Kotlin : 自定義Listener,預防神經病的發瘋式連續點擊
下一篇
Android x Kotlin : 圖片輪播-BannerViewpager
系列文
Android Kotlin開發 -小嫩雞的30篇精選筆記30

尚未有邦友留言

立即登入留言