Android开发 系统栏开发(状态栏与导航栏)
<h1><span style="color: rgba(0, 128, 128, 1)">版权声明</span></h1><p>本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/13039486.html</p>
<div>本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。</div>
<h1><span style="color: rgba(0, 128, 128, 1)">前言</span></h1>
<p> 很多UI设计都要求修改状态栏的一些颜色、字体颜色、沉浸式等等效果,这篇博客就重点整理所有状态栏开发技术点。</p>
<p> 转载请注明来源:https://www.cnblogs.com/guanxinjing/p/13039486.html</p>
<h1><span style="color: rgba(0, 128, 128, 1)">关于国内手机厂商的适配问题</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"> 我目前已经不太关心适配问题了,之前的Android版本因为google的问题导致状态栏上严重跟不上时代,各种效果无法实现,导致各个厂商都自己实现状态栏碎片化很严重,让兼容问题无比复杂,但是在Android8.0后。google已经完善了状态栏最后一块短板,所以大部分厂商已经放弃了自己造轮子的行为,加入了google原生的实现。且目前国内的设备普遍都是Android8.0以上了。之前的各色状态栏兼容工具类已经意义不大了,所以回归到了正道上,学习google原生折腾状态栏的方法。</span></p>
<h1><span style="color: rgba(0, 128, 128, 1)">改变colorPrimaryDark颜色, 从而改变状态栏颜色</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)"> 在app创建后在styles文件里的AppTheme(这个是默认主题,如果你修改为了其他你自定义的主题,以你的主题为标准)主题下colorPrimaryDark属性</span><span style="color: rgba(0, 0, 0, 1)">,它是作用于状态栏的颜色值,参考下图了解每一个属性作用域:</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200603181200741-1183058047.jpg" alt=""></span></p>
<p> </p>
<p> </p>
<h3><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">改变</span></span>colorPrimaryDark从而改变<span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">全局App状态栏颜色</span></span></h3>
<p><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">修改<span style="color: rgba(0, 0, 0, 1)">colorPrimaryDark</span>改变状态栏颜色,这是最简单的方式,可以把全局App的每个页面的状态栏颜色都修改成指定颜色,代码如下:</span></span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">styles.xml</span></span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">这里将状态栏修改成黄色</span></span></p>
<p> </p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> Base application theme. </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="AppTheme"</span><span style="color: rgba(255, 0, 0, 1)"> parent</span><span style="color: rgba(0, 0, 255, 1)">="Theme.AppCompat.Light.DarkActionBar"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorPrimary"</span><span style="color: rgba(0, 0, 255, 1)">></span>@color/colorPrimary<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorPrimaryDark"</span><span style="color: rgba(0, 0, 255, 1)">></span>#FF9800<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">修改的黄色颜色值,这里只是举例。实际项目还是把颜色值老老实实地放在color文件里</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorAccent"</span><span style="color: rgba(0, 0, 255, 1)">></span>@color/colorAccent<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>注意,这个主题要设置成app全局主题,在AndroidManifest里设置。</p>
<p>AndroidManifest.xml</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">manifest </span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(255, 0, 0, 1)">
package</span><span style="color: rgba(0, 0, 255, 1)">="com.yt.modeldemo"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">application
</span><span style="color: rgba(255, 0, 0, 1)">android:allowBackup</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
android:hardwareAccelerated</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
android:icon</span><span style="color: rgba(0, 0, 255, 1)">="@mipmap/ic_launcher"</span><span style="color: rgba(255, 0, 0, 1)">
android:label</span><span style="color: rgba(0, 0, 255, 1)">="@string/app_name"</span><span style="color: rgba(255, 0, 0, 1)">
android:roundIcon</span><span style="color: rgba(0, 0, 255, 1)">="@mipmap/ic_launcher_round"</span><span style="color: rgba(255, 0, 0, 1)">
android:supportsRtl</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
android:theme</span><span style="color: rgba(0, 0, 255, 1)">="@style/AppTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">在这里设置全局主题</span><span style="color: rgba(0, 128, 0, 1)">--></span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200603183411901-144651293.png" alt=""></p>
<p> </p>
<p> </p>
<h3><span style="color: rgba(0, 0, 0, 1)">修改colorPrimaryDark,改变某一个Activity的状态栏颜色</span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">一个app全局只使用一种状态栏颜色,这只是一个美好的愿望。 实际项目十分蛋疼,各种activity都需要各种颜色的状态栏。我们可以创建一个新的主题改变<span style="color: rgba(0, 0, 0, 1)">colorPrimaryDark</span>颜色后,给这个activity使用。代码如下:</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(0, 0, 0, 1)">styles.xml</span></span></span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)"> Base application theme. </span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="AppTheme"</span><span style="color: rgba(255, 0, 0, 1)"> parent</span><span style="color: rgba(0, 0, 255, 1)">="Theme.AppCompat.Light.DarkActionBar"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorPrimary"</span><span style="color: rgba(0, 0, 255, 1)">></span>@color/colorPrimary<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorPrimaryDark"</span><span style="color: rgba(0, 0, 255, 1)">></span>#FF9800<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorAccent"</span><span style="color: rgba(0, 0, 255, 1)">></span>@color/colorAccent<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="MainActivityTheme"</span><span style="color: rgba(255, 0, 0, 1)"> parent</span><span style="color: rgba(0, 0, 255, 1)">="AppTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">其他属性的颜色,我们依然需要使用全局AppTheme,所以这里直接引用它</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="colorPrimaryDark"</span><span style="color: rgba(0, 0, 255, 1)">></span>#2196F3<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">修改这MainActivity需要使用的状态栏颜色</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>AndroidManifest.xml</p>
<p>找到需要设置的activity,将主题设置给它。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">activity </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".MainActivity"</span><span style="color: rgba(255, 0, 0, 1)">
android:theme</span><span style="color: rgba(0, 0, 255, 1)">="@style/MainActivityTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">设置这个activity的主题</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">action </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.action.MAIN"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">category </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.category.LAUNCHER"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">activity</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)">在activity里:</span></p>
<p>当然除了在AndroidManifest.xml里设置,我们还可以直接在代码了里直接设置这个主题。<span style="color: rgba(255, 0, 0, 1)"><strong>请注意!</strong></span>代码里设置主题一定要在<span style="color: rgba(0, 0, 0, 1)"> setContentView(R.layout.activity_main); 方法前面。(喜欢搞BaseActivity封装<span style="color: rgba(0, 0, 0, 1)">setContentView</span>的同学注意了!你们这就是脱裤子放屁多此一举,反而在会影响别人设置setTheme,深刻了解什么是过度封装,什么代码统一一个地方修改全局,那也得看看是什么形式的封装,google直接在创建Activity的时候都帮你写好了,你这么厉害怎么不去google?)</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
setTheme(R.style.MainActivityTheme);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置主题,一定要在setContentView前面</span>
<span style="color: rgba(0, 0, 0, 1)"> setContentView(R.layout.activity_main);
}</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200603184822428-661692354.png" alt=""></p>
<p> </p>
<p> </p>
<p> </p>
<h1><span style="color: rgba(0, 128, 128, 1)">setStatusBarColor方法改变状态栏颜色</span></h1>
<p>此方法是Android 5.0 后提供的</p>
<p>代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setStatusBarColor(Color.RED);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">略....</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604142014923-1440400325.png" alt=""></p>
<p> </p>
<h1><span style="color: rgba(0, 128, 128, 1)">切换状态栏字体与图标颜色模式</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">说是切换颜色,其实Android只有2种模式,一种是深色模式,一种是高亮模式。<span style="color: rgba(0, 0, 0, 1)">Android的状态栏字体与小图标颜色是不允许</span>自定义颜色的。提供这两种模式是希望用户可以在深色与亮色模式下都能看清楚状态栏内容。</span></p>
<h3><span style="color: rgba(0, 0, 0, 1)">白底黑字的高亮模式</span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">代码:</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
getWindow().setStatusBarColor(Color.WHITE);</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置状态栏背景颜色为白色</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">白低黑字的高亮模式</span>
<span style="color: rgba(0, 0, 0, 1)"> setContentView(R.layout.activity_main);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">略....</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604205600494-283794928.png" alt=""></p>
<h3>默认的黑低白字的深色模式</h3>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
getWindow().setStatusBarColor(Color.BLACK);</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">设置状态栏背景颜色为黑色</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">STABLE为稳固的意思,其实就是默认模式</span>
<span style="color: rgba(0, 0, 0, 1)"> setContentView(R.layout.activity_main);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">略....</span></pre>
</div>
<p>效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604205908495-1043811741.png" alt=""></p>
<p>在Api30之后上面方法提示<strong>过时</strong>,提示使用WindowInsetsController替代</p>
<div class="cnblogs_code">
<pre> val windowController =<span style="color: rgba(0, 0, 0, 1)"> ViewCompat.getWindowInsetsController(mBinding.root)
windowController</span>?.isAppearanceLightStatusBars = <span style="color: rgba(0, 0, 255, 1)">false</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">状态栏文字白色</span>
windowController?.isAppearanceLightStatusBars = <span style="color: rgba(0, 0, 255, 1)">true</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">状态栏文字黑色</span></pre>
</div>
<p> </p>
<p><strong><span style="color: rgba(0, 0, 0, 1)">在style Theme里设置</span></strong></p>
<p><span style="color: rgba(0, 0, 0, 1)">这个需要<span style="color: rgba(0, 0, 0, 1)">API </span>23 (Android 6.0)</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="android:windowLightStatusBar"</span><span style="color: rgba(0, 0, 255, 1)">></span>true<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">隐藏与显示状态栏</span></h1>
<p><span style="color: rgba(0, 0, 0, 1)">有两种方式</span></p>
<h3><strong><span style="color: rgba(0, 0, 0, 1)">第一种,设置<span style="color: rgba(0, 0, 0, 1)">Window </span>flag形式,让window全屏显示,达到隐藏状态栏的目的</span></strong></h3>
<p><span style="color: rgba(0, 0, 0, 1)">这种方式是Android3.0以前隐藏状态栏的方式,目前<span style="color: rgba(0, 0, 0, 1)">google</span>应该不希望你用这种方式控制状态栏,这只是控制window时达到的一种效果。请注意,使用这个方式可能会影响输入盘的自动调整功能,所以非必要不应该使用这种方式隐藏状态栏。</span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 隐藏状态栏</span>
<span style="color: rgba(0, 0, 0, 1)">getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 显示状态栏</span>
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);</pre>
</div>
<p>隐藏效果图:</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604142802221-1511258506.png" alt=""></p>
<h3>第二种,控制系统UI <span style="color: rgba(0, 0, 0, 1)">setSystemUiVisibility 隐藏或者显示状态栏</span></h3>
<p><span style="color: rgba(0, 0, 0, 1)">这种应该是google的推荐方式。是Android4.1后实现的方式</span></p>
<div class="cnblogs_code">
<pre> getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">隐藏状态栏</span>
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">显示状态栏</span>
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">状态栏图标低调模式 </span></pre>
</div>
<p>低调模式效果图:</p>
<p>自保留电量并且淡化电量图标,其他图标全部隐藏</p>
<p><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604144649237-161604602.png" alt=""></p>
<p>上面使用setSystemUiVisibility 在在Api30之后<strong>提示过时</strong>,使用WindowInsetsController 替代</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> fun show(){
val windowController </span>=<span style="color: rgba(0, 0, 0, 1)"> ViewCompat.getWindowInsetsController(mBinding.root)
windowController</span>?<span style="color: rgba(0, 0, 0, 1)">.show(WindowInsetsCompat.Type.statusBars())
}
fun hide(){
val windowController </span>=<span style="color: rgba(0, 0, 0, 1)"> ViewCompat.getWindowInsetsController(mBinding.root)
windowController</span>?<span style="color: rgba(0, 0, 0, 1)">.hide(WindowInsetsCompat.Type.statusBars())
}</span></pre>
</div>
<p><span style="color: rgba(0, 0, 0, 1)">最新Api 32 上面的也过时了,可以用下面的方式</span></p>
<p> </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> fun show(){
val windowController </span>=<span style="color: rgba(0, 0, 0, 1)"> WindowCompat.getInsetsController(activity.window, activity.window.decorView)
windowController.show(WindowInsetsCompat.Type.statusBars())
}
fun hide(){
val windowController </span>=<span style="color: rgba(0, 0, 0, 1)"> WindowCompat.getInsetsController(activity.window, activity.window.decorView)
windowController.hide(WindowInsetsCompat.Type.statusBars())
}</span></pre>
</div>
<p> </p>
<h1><span style="color: rgba(0, 128, 128, 1)">沉浸式状态栏 </span></h1>
<p>上面只改改状态栏的颜色,有时候也无法满足UI设计师们希望掌握状态栏的野心。有时候会提供一张图片,希望让你将图片成为状态栏的背景配合App当前主题,这种状态栏就是沉浸式状态栏。这部分可能要涉及到一些标题栏的知识。</p>
<p>因为沉浸式状态栏栏一般就包含了自定义标题栏,因为我们需要自定义一个能设置背景图片的标题栏(或者你干脆没有标题栏),所以需要新增或者修改创建一个没有标题栏的主题:</p>
<p>隐藏标题栏的部分可以参考我另一篇博客:https://www.cnblogs.com/guanxinjing/p/13042584.html</p>
<p>styles.xml</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="NotTitleAppTheme"</span><span style="color: rgba(255, 0, 0, 1)"> parent</span><span style="color: rgba(0, 0, 255, 1)">="AppTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">item </span><span style="color: rgba(255, 0, 0, 1)">name</span><span style="color: rgba(0, 0, 255, 1)">="windowNoTitle"</span><span style="color: rgba(0, 0, 255, 1)">></span>true<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">item</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>将这个主题导入,需要实现沉浸式状态栏的Activity</p>
<p>AndroidManifest.xml</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">activity </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">=".MainActivity"</span><span style="color: rgba(255, 0, 0, 1)">
android:theme</span><span style="color: rgba(0, 0, 255, 1)">="@style/NotTitleAppTheme"</span><span style="color: rgba(0, 0, 255, 1)">></span> <span style="color: rgba(0, 128, 0, 1)"><!--</span><span style="color: rgba(0, 128, 0, 1)">设置这个没有标题栏的主题</span><span style="color: rgba(0, 128, 0, 1)">--></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">action </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.action.MAIN"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">category </span><span style="color: rgba(255, 0, 0, 1)">android:name</span><span style="color: rgba(0, 0, 255, 1)">="android.intent.category.LAUNCHER"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">intent-filter</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">activity</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>在这个Activity的布局里添加,我们自己的Toolbar标题栏,如果你没有需要标题栏就可以直接放一个ImageView进去</p>
<p>activity_main.xml</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><?</span><span style="color: rgba(255, 0, 255, 1)">xml version="1.0" encoding="utf-8"</span><span style="color: rgba(0, 0, 255, 1)">?></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">androidx.constraintlayout.widget.ConstraintLayout
</span><span style="color: rgba(255, 0, 0, 1)">xmlns:android</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res/android"</span><span style="color: rgba(255, 0, 0, 1)">
xmlns:app</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/apk/res-auto"</span><span style="color: rgba(255, 0, 0, 1)">
xmlns:tools</span><span style="color: rgba(0, 0, 255, 1)">="http://schemas.android.com/tools"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:background</span><span style="color: rgba(0, 0, 255, 1)">="@android:color/white"</span><span style="color: rgba(255, 0, 0, 1)">
tools:context</span><span style="color: rgba(0, 0, 255, 1)">=".MainActivity"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">androidx.appcompat.widget.Toolbar
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/toolbar"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:background</span><span style="color: rgba(0, 0, 255, 1)">="@mipmap/ic_image"</span><span style="color: rgba(255, 0, 0, 1)">
android:fitsSystemWindows</span><span style="color: rgba(0, 0, 255, 1)">="true"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintTop_toTopOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:title</span><span style="color: rgba(0, 0, 255, 1)">="标题"</span><span style="color: rgba(255, 0, 0, 1)">
app:titleTextColor</span><span style="color: rgba(0, 0, 255, 1)">="@android:color/white"</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">androidx.appcompat.widget.Toolbar</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">Button
</span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/add_count_btn"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(255, 0, 0, 1)">
android:text</span><span style="color: rgba(0, 0, 255, 1)">="Hello world"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintLeft_toLeftOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintRight_toRightOf</span><span style="color: rgba(0, 0, 255, 1)">="parent"</span><span style="color: rgba(255, 0, 0, 1)">
app:layout_constraintTop_toBottomOf</span><span style="color: rgba(0, 0, 255, 1)">="@id/toolbar"</span> <span style="color: rgba(0, 0, 255, 1)">/></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">androidx.constraintlayout.widget.ConstraintLayout</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>请注意,这里使用了一个 <span style="color: rgba(255, 0, 0, 1)">android:fitsSystemWindows<span style="color: rgba(0, 0, 255, 1)">="true"</span></span> 属性,如果是你的是一张图片的ImageView也需要添加,这样它会自动帮我们在标题栏里增加状态栏的高度。</p>
<p>在Activity的代码里设置状态栏与添加Toolbar</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar </span>=<span style="color: rgba(0, 0, 0, 1)"> findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);</span><span style="color: rgba(0, 128, 0, 1)">/*让布局可以</span><span style="color: rgba(0, 128, 0, 1)">全屏,延展到状态栏里</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getWindow().setStatusBarColor(Color.TRANSPARENT);</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">透明状态栏</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">略...</span></pre>
</div>
<p><strong>请注意</strong>,这里设置的 <strong><span style="color: rgba(0, 0, 0, 1)">SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN </span></strong><span style="color: rgba(0, 0, 0, 1)">属性与上面的状态栏隐藏是不一样的,这里只是让我们的布局可以延展到状态栏里,让我们布局成为状态栏的一部分,所以叫Layout fullscreen 布局全屏。</span></p>
<p><span style="color: rgba(0, 0, 0, 1)">效果图:</span></p>
<p><span style="color: rgba(0, 0, 0, 1)"><img src="https://img2020.cnblogs.com/blog/1497956/202006/1497956-20200604163116103-2133003946.png" alt=""></span></p>
<h2>取消沉浸式</h2>
<div class="cnblogs_code">
<pre>getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//或者设置<span style="color: rgba(0, 0, 0, 1)">SYSTEM_UI_FLAG_LAYOUT_STABLE</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">在沉浸式状态栏下修改字体模式</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
getWindow().setStatusBarColor(Color.TRANSPARENT);
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 在SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 布局全局情况下 在增加 SYSTEM_UI_FLAG_LAYOUT_STABLE 高亮模式 或者 SYSTEM_UI_FLAG_LAYOUT_STABLE 默认的深色模式
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN </span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
setContentView(R.layout.activity_main);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">略....</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">获取状态栏高度</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)"> /**</span><span style="color: rgba(0, 128, 0, 1)">
* 获取状态栏高度
* </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> context
* </span><span style="color: rgba(128, 128, 128, 1)">@return</span>
<span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> getStatusBarHeight(Context context) {
Resources resources </span>=<span style="color: rgba(0, 0, 0, 1)"> context.getResources();
</span><span style="color: rgba(0, 0, 255, 1)">int</span> resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 0, 255, 1)">int</span> height =<span style="color: rgba(0, 0, 0, 1)"> resources.getDimensionPixelSize(resourceId);
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> height;
}</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">导航栏隐藏与显示</span></h1>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> @Override
</span><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onCreate(@Nullable Bundle savedInstanceState) {
</span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onCreate(savedInstanceState);
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* SYSTEM_UI_FLAG_VISIBLE——显示状态栏和导航栏
*
* SYSTEM_UI_FLAG_LOW_PROFILE——此模式下,状态栏的图标可能是暗的
*
* SYSTEM_UI_FLAG_HIDE_NAVIGATION——隐藏导航栏
*
* SYSTEM_UI_FLAG_FULLSCREEN——全屏,隐藏状态栏和导航栏
*
* SYSTEM_UI_FLAG_LAYOUT_STABLE 全屏显示尺寸不变
*
* SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
*
* SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN——全屏,隐藏导航栏,状态栏浮在布局上。
*
* SYSTEM_UI_FLAG_IMMERSIVE——沉浸式:半透明的状态栏和导航栏
*
* SYSTEM_UI_FLAG_IMMERSIVE_STICKY——粘性沉浸式
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* ==============第一种设置方法 此方法为永久性的====================
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 隐藏导航栏与状态栏,将导航栏拉起后会很快速的隐藏导航栏
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
WindowManager.LayoutParams params </span>=<span style="color: rgba(0, 0, 0, 1)"> getWindow().getAttributes();
params.systemUiVisibility </span>= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|<span style="color: rgba(0, 0, 0, 1)">View.SYSTEM_UI_FLAG_IMMERSIVE;
getWindow().setAttributes(params);
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 隐藏导航栏,但是点击屏幕后会显示导航栏
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
WindowManager.LayoutParams params </span>=<span style="color: rgba(0, 0, 0, 1)"> getWindow().getAttributes();
params.systemUiVisibility </span>=<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
getWindow().setAttributes(params);
WindowManager.LayoutParams params </span>=<span style="color: rgba(0, 0, 0, 1)"> getWindow().getAttributes();
params.systemUiVisibility </span>= View.SYSTEM_UI_FLAG_FULLSCREEN |<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
getWindow().setAttributes(params);
</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* ====================第二种设置方法 此方法为临时性的=========================
</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
* 临时性的设置导航栏。跳转其他页面后会导航栏自动恢复,在注解里也有说明,注解的部分如下:
* 请求更改状态栏或其他屏幕窗口装饰的可见性。此方法用于将设备上的 UI 置于临时模式
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
}</span></pre>
</div>
<h1><span style="color: rgba(0, 128, 128, 1)">getWindow().setAttributes() 与 getWindow().getDecorView().setSystemUiVisibility()的区别</span></h1>
<p>getWindow().setAttributes(params) 设置方法 此方法为当前永久性改变当前app的系统栏状态</p>
<div class="cnblogs_code">
<pre> WindowManager.LayoutParams params =<span style="color: rgba(0, 0, 0, 1)"> getWindow().getAttributes();
params.systemUiVisibility </span>= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|<span style="color: rgba(0, 0, 0, 1)">View.SYSTEM_UI_FLAG_IMMERSIVE;
getWindow().setAttributes(params);</span></pre>
</div>
<p>getWindow().getDecorView().setSystemUiVisibility()设置方法 此方法为临时性的,跳转其他页面后会导航栏自动恢复。这种方法更适合在视频播放器中</p>
<p>在官方注解里也有这段话的说明 :</p>
<p>This method is used to put the over device UI into temporary modes where the user's attention is focused more on the application content</p>
<p>此方法用于将设备上的 UI 置于临时模式,让用户的注意力更多地集中在应用程序内容上</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"> getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_FULLSCREEN
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
</span>|<span style="color: rgba(0, 0, 0, 1)"> View.SYSTEM_UI_FLAG_IMMERSIVE
</span>| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);</pre>
</div>
<p> </p>
<p> </p>
<p><span style="color: rgba(0, 0, 0, 1)">End</span></p>
</div>
<div id="MySignature" role="contentinfo">
<div style="text-align: center">
<p style="color:orange;font-size:16px;" >本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/13039486.html </p>
<div style="color:orange;font-size:16px;">本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。 </div>
</div><br><br>
来源:https://www.cnblogs.com/guanxinjing/p/13039486.html
頁:
[1]