安卓8.1狀態欄沉浸並保證布局不和虛擬鍵重疊的辦法


對於 android5.0 以上的狀態欄沉浸方法,我看到的大部分說法是下面的style

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

  

剛開始我也是這么用的,似乎沒有什么問題,但是后來發現在有底部虛擬按鍵的設備上,我的應用布局會和三個虛擬按鍵重疊,但是我想要的效果是我的布局在虛擬鍵之上

於是我去掉了這句話

<item name="android:windowTranslucentNavigation">true</item>

  

然后我的狀態欄卻不再沉浸了,不太清除這句話為什么會影響狀態欄,看起來好像只會影響底部虛擬鍵的樣子

 

於是另找解決辦法,實現了沉浸狀態欄的同時布局位於虛擬鍵之上

核心代碼如下,java代碼和item需要同時使用

代碼中加上這段代碼

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) try {
            Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");
            Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");
            field.setAccessible(true);
            field.setInt(getWindow().getDecorView(), Color.TRANSPARENT);  //改為透明
        } catch (Exception e) {
        }

  

style中加上下面的item

        <item name="android:windowTranslucentStatus">true</item>

  

原理參考下文,好像是用反射解決的,鏈接如下

原 解決Android7.0下沉浸式狀態欄變灰問題

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM