第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 安卓刘海屏沉浸式(内容绘制到底部 隐藏底部导航栏 状态栏背景颜色为透明)

安卓刘海屏沉浸式(内容绘制到底部 隐藏底部导航栏 状态栏背景颜色为透明)

时间:2021-09-26 12:36:44

相关推荐

安卓刘海屏沉浸式(内容绘制到底部 隐藏底部导航栏 状态栏背景颜色为透明)

纯java实现(只针对比较新的版本,且没有实现字体为黑色):

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Window window = getWindow();// 5.0以上系统状态栏透明if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);}// View.SYSTEM_UI_FLAG_LAYOUT_STABLE:全屏显示时保证尺寸不变。// View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏显示,状态栏显示在Activity页面上面。// View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN// View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏导航栏// View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏显示,且状态栏被隐藏覆盖掉。// View.SYSTEM_UI_FLAG_VISIBLE:Activity非全屏显示,显示状态栏和导航栏。// View.INVISIBLE:Activity伸展全屏显示,隐藏状态栏。// View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN// View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:必须配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION组合使用,达到的效果是拉出状态栏和导航栏后显示一会儿消失。// 全屏展示// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// window.setStatusBarColor(Color.TRANSPARENT);// }if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// 全屏显示,隐藏状态栏和导航栏,拉出状态栏和导航栏显示一会儿后消失。window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE// | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION// | View.SYSTEM_UI_FLAG_FULLSCREEN| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);} else {// 全屏显示,隐藏状态栏window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);}}setContentView(R.layout.activity_main);}}

但是上面代码,启动屏打开后状态栏会闪一下,因为默认状态栏是有背景颜色的,所以最后先在style.xml里面设置透明

<!--windowLayoutInDisplayCutoutMode 是谷歌提供的刘海屏方案,只需要这一行就可以,但是国内手机基本不鸟他,都有自己的方案,但是还不一定有效--><item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item><item name="android:windowTranslucentStatus">true</item>

vivo,华为,小米的绘制到状态栏底部,androidmainifest.xml配置,实测有效

<!--允许绘制到oppo、vivo刘海屏机型的刘海区域 --><meta-data android:name="android.max_aspect" android:value="2.2" /><!-- 允许绘制到华为刘海屏机型的刘海区域 --><meta-data android:name="android.notch_support" android:value="true" /><!-- 允许绘制到小米刘海屏机型的刘海区域 --><meta-data android:name="notch.config" android:value="portrait" />

其他相关设置:/wwslina/article/details/88807752

国产机可能需要做的特殊设置:/xuehuayous/article/details/79356198

状态栏兼容:/p/6ebc25b9306e

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。