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;//新属性,能将全屏的刘海部分黑边去掉,同时这个有三个模式,能够参考文档

        }
    }

相关文章
相关标签/搜索