Android 全屏适配 游戏
全屏适配
全面屏适配分为
-
沉浸式适配
沉浸式适配是指:将画面延展到 状态栏 或者 改变状态栏,把状态栏颜色改成和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);
}
其中==注意==几个属性值的效果变化,IMMERSIVE 和 IMMERSIVE_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;//新属性,能将全屏的刘海部分黑边去掉,同时这个有三个模式,可以参考文档
}
}
` 如果弹出出现,底部导航不会自动缩回,此时设置一下扯个监听,即可 getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int arg0) {
// TODO Auto-generated method stub
hideBottomUI(getWindow().getDecorView());
}
});`





