關(guān)于沉浸式狀態(tài)欄和透明化系統(tǒng)欄的官方說明
-
Immersive full-screen mode
To provide your app with a layout that fills the entire(全部的) screen宛蚓,the new SYSTEM_UI_FLAG_IMMERSIVE flag for setSystemUIVisivility()(when combined(結(jié)合) with SYSTEM_UI_FLAG_HIDE_NAVIGATION enables a new immersivefull-screen mode.while immersive full-screen mode is enable, your activity continues to receive all touch events, The user can reveal(展現(xiàn)译红,披露) the system bars with an inward(向內(nèi)的) swipe(揮擊) along the region where the system bars normally appear. This clears the SYSTEM_UI_FIAG_HIDE_NAVIGATION flag (and the SYSTEM_UI_FIAG_FULL_SCREEN flag, if applied) so the system bars remain visiable. However, if you'd like the system bars to hide again after a few moments, you can instead use the SYSTEM_UI_FIAG_IMMERSIVE_STICKY flag.
-
Translucent(透明化) system bars
You can now make the system bars partially translucent with the themes,
Theme.Holo.NoActionBar.TranslucentDecor and Theme.Holo.NoActionBar.TranslucentDecor. By enabling translucent system bars, your layout will fill the area behind the system bars, so you must also enable fitsSystemWindows for the portion(部分) of your layout that should not be covered by the system bars.
If you're creating a custom theme, set one of these themes as the parent theme or include the windowTranslucentNavigation and windowTranslucentStatus style properties in your theme.
關(guān)于透明狀態(tài)欄說明:透明狀態(tài)欄就是狀態(tài)欄的顏色和activity根布局顏色相同艘狭。
- 和圖片顏色相同的透明狀態(tài)欄
- 和根布局顏色相同的透明狀態(tài)欄
顏色方式
在 android studio 中庞钢,排列方式變成 project,然后生成 values-v19 文件夾和 values-v21 文件夾诲锹,在文件夾中新建 style.xml 文件菩暗,接著分別在不同的 style 中生成 theme
values-v19/style.xml
<Style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavagation">true</item>
<item name="android:fitsSystemWindows">true</item>
</style>
values-v21/style.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">#31c27c</item>
<item name="android:fitsSystemWindows">true</item>
</style>
將 activity 的 theme 設(shè)置為 AppTheme
這個生成 Toast 會產(chǎn)生位移,可以使用 Toast.makeText(getApplicationContext(), "toast", Toast.LENGTH_SHORT).show();
圖片方式
values-v19/style.xml
<Style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavagation">true</item>
<item name="android:fitsSystemWindows">true</item>
</style>
values-v21/style.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:fitsSystemWindows">true</item>
</style>
其實圖片方法和顏色方法殊途同歸术裸,可以直接使用相同的 <item name="android:statusBarColor">@android:color/transparent</item>
來使用
除了在 values-v19 和 values-v21 的 style.xml 中使用 fitsSystemWindows 屬性倘是,還可以直接在根部局中加上 android:fitsSystemWindows="true"
屬性,這個方法就沒有 toast 位移的問題袭艺,但是需要在每一個activity的根布局中加入這個屬性搀崭,比較麻煩,我們還可以使用以下方法來解決重復(fù)書寫 fitsSystemWindows:
-
新建一個TranslucentBarBaseActivity
public abstract class TranslucentBarBaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); supportRequestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(getLayoutResId());//把設(shè)置布局文件的操作交給繼承的子類 ViewGroup contentFrameLayout = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT); View parentView = contentFrameLayout.getChildAt(0); if (parentView != null && Build.VERSION.SDK_INT >= 14) { parentView.setFitsSystemWindows(true); } } /** * 返回當(dāng)前Activity布局文件的id * *@return */ abstract protected int getLayoutResId(); }
然后主 activiy 繼承此 activiy猾编,就可以了瘤睹。
以上文檔引用自 Android開發(fā):Translucent System Bar 的最佳實踐
TranslucentBarDemo 中可以看到代碼