Android 全屏適配 遊戲

全屏適配

全面屏適配分爲javascript

  • 沉浸式適配java

    沉浸式適配是指:將畫面延展到 狀態欄 或者 改變狀態欄,把狀態欄顏色改爲和app相近的顏色。android

  • 劉海適配api

    劉海適配是指:劉海部分的處理。app

適配沉浸式


隱藏actionbar 更改 statusbar 顏色
<style name="thememe" parent="Theme.AppCompat.NoActionBar">
       <item name="android:statusBarColor">@android:color/holo_blue_bright</item>  
    </style>
	主題繼承一個 noacitonbar 主題
	idtem 添加一個statusbarcolor       此處設置透明,則爲黑色。 若是設置爲紅色則爲紅色

隱藏actionbar statusbar透明
隱藏actionbar  隱藏statusbar   其中,單獨設置statusbar透明是不起做用的。須要加上windowTranslucentStatus
	
	此時狀態欄是透明瞭,可是狀態欄沒有隱藏,只是透明瞭,而且佈局往上移。此時若是想沉浸式,解決方案能夠在本身佈局添加一個statusbar高的底色佈局
	
 <style name="thememe1" parent="Theme.AppCompat.NoActionBar">
        <!-- 設置statusBarColor 爲透明   單獨設置statusbar透明是不起做用的,此處透明會使佈局往上移-->
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

隱藏actionbar 隱藏statusbar 底部導航欄透明(不建議直接使用)
隱藏actionbar  隱藏statusbar  底部導航欄透明 不建議直接使用
	
  <style name="thememe2" parent="Theme.AppCompat.NoActionBar">
        <!-- 設置底部導航欄爲透明 且導航欄會遮住佈局 -->
        <item name="android:windowTranslucentNavigation">true</item>
        <!-- 設置statusBarColor 爲透明   單獨設置statusbar透明是不起做用的,此處透明會使佈局往上移-->
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

隱藏actionbar 隱藏statusbar 全屏顯示
隱藏actionbar  隱藏statusbar  底部導航欄透明 
  <style name="thememe2" parent="Theme.AppCompat.NoActionBar">
        <!-- 設置底部導航欄爲透明 且導航欄會遮住佈局 -->
        <item name="android:windowTranslucentNavigation">true</item>
        <!-- 設置statusBarColor 爲透明   單獨設置statusbar透明是不起做用的,此處透明會使佈局往上移-->
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
	
	
	**代碼設置屬性,在setcontentview後面調用**
	
	 protected void hideBottomUIMenu1(){
        //隱藏虛擬按鍵,而且全屏

            Toast.makeText(this,"api dayu 19",Toast.LENGTH_SHORT).show();
            //for new api versions.
            View decorView = getWindow().getDecorView();
            int uiOptions =
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE     // 註釋和不註釋沒有變化
                            |   View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 註釋和不註釋沒有變化
                               | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN   // 註釋和不註釋沒有變化
                               | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar 隱藏導航欄
                               | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 全屏  即隱藏電量 狀態欄.可是劉海屏有黑邊,須要配合安卓10屬性
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//拉出來,幾秒不操做本身彈回去
                            | View.SYSTEM_UI_FLAG_IMMERSIVE//拉出來,不會本身回去
                    ;
            decorView.setSystemUiVisibility(uiOptions);

    }

其中==注意==幾個屬性值的效果變化,IMMERSIVEIMMERSIVE_STICKY 一個拉出底部導航欄,過幾秒會縮回去,一個不會。ide

劉海適配


上面的沉浸式適配,在有劉海的全面屏下是有瑕疵的,當全屏顯示,狀態欄部分會變成一條黑色。 若是app是遊戲來講是不太友好的 試了不少屬性,若是隱藏電量顯示,劉海部分就爲黑色,若是不隱藏,又不美觀。佈局

在安卓大於等於28 10.0的系統上,有了適配劉海的新的api能夠解決這個問題。ui

protected void hideBottomUIMenu2(){
        //隱藏虛擬按鍵,而且全屏
        if (Build.VERSION.SDK_INT >= 28) {
            Toast.makeText(this,"api dayu 28",Toast.LENGTH_SHORT).show();
            //for new api versions.
            View decorView = getWindow().getDecorView();
            int uiOptions =
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE     // 註釋和不註釋沒有變化
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 註釋和不註釋沒有變化
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN   // 註釋和不註釋沒有變化
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar 隱藏導航欄
                            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar 全屏  即隱藏電量 狀態欄.可是劉海屏有黑邊,須要配合安卓10屬性
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY //拉出來,幾秒不操做本身彈回去
                    ;
            decorView.setSystemUiVisibility(uiOptions);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;//新屬性,能將全屏的劉海部分黑邊去掉,同時這個有三個模式,能夠參考文檔

        }
    }

相關文章
相關標籤/搜索