Android 全屏适配 游戏

原创
10/16 15:10
阅读数 3.6K

全屏适配

全面屏适配分为

  • 沉浸式适配

    沉浸式适配是指:将画面延展到 状态栏 或者 改变状态栏,把状态栏颜色改成和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 一个拉出底部导航栏,过几秒会缩回去,一个不会。

刘海适配


上面的沉浸式适配,在有刘海的全面屏下是有瑕疵的,当全屏显示,状态栏部分会变成一条黑色。 如果app是游戏来说是不太友好的 试了很多属性,如果隐藏电量显示,刘海部分就为黑色,如果不隐藏,又不美观。

在安卓大于等于28 10.0的系统上,有了适配刘海的新的api可以解决这个问题。

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

        }
    }

展开阅读全文
打赏
2
3 收藏
分享
加载中
很厉害👍🏻
10/18 22:31
回复
举报
更多评论
打赏
1 评论
3 收藏
2
分享
返回顶部
顶部