準備工作
studio,中引入沉浸式兼容庫
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
eclipse带欢,可以導入相應的那個類料扰。
第一類嗜浮,兼容actionbar
- 第一步:設置activity主題android:theme=”@style/ActionBarTheme”
<style name="ActionBarTheme"parent="android:Theme.Holo.Light.DarkActionBar">
<!--API 14 themecustomizationscangohere. -->
<item name="android:actionBarStyle">@style/ActionBarStyle</item>
</style>
<style name="ActionBarStyle" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/actionbar_bg</item>
</style>```
* 第二步:設置狀態(tài)欄透明巍举,然后設置狀態(tài)欄沉浸的顏色
@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
//設置沉浸的顏色 tintManager.setStatusBarTintResource(R.color.statusbar_bg);}```
- 第三步:設置適應windows羊娃,在布局文件設置
android:fitsSystemWindows=”true”
如果不設置饭入,應用的ui會頂上去耗式,頂進system ui
ok
第二類 沒有actionbar的activity
- 第一步接校,設置主題,android:theme=”@style/FullBleedTheme”
<stylename="FullBleedTheme"parent="android:Theme.Holo.Light.NoActionBar">
<!--API 14 themecustomizationscangohere. -->
</style>
<stylename="FullBleedTheme"parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor">
<!--API 19 themecustomizationscangohere. -->
</style>```
或者
用toolbar只能設置Theme.AppCompat.NoActionBar主題
<style name="AppThemeToolbar" parent="Theme.AppCompat.NoActionBar">
<itemname="colorPrimary">#2196F3</item>
<itemname="colorPrimaryDark">#2196F3</item>
<itemname="colorAccent">#E91E63</item>
</style>```
- 第二步:同上一個第二步糖耸。
設置狀態(tài)欄透明+顏色
mTintManager = new SystemBarTintManager(this);
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setNavigationBarTintEnabled(true); mTintManager.setStatusBarTintResource(R.color.statusbar_bg);```
* 第三步:
android:fitsSystemWindows=”true”
android:clipToPadding=”false”```
<item name="android:fitsSystemWindows">true</item>
<item name="android:clipToPadding">false</item>```
### 可能出現(xiàn)的問題
* android:fitsSystemWindows屬性的奇怪問題
> 官方解釋是布局的時候是否考慮系統(tǒng)的狀態(tài)欄秘遏,標題欄,通知欄之類的嘉竟。
>我的實際使用是邦危,為true:那么布局的時候會把系統(tǒng)的狀態(tài)欄,標題欄舍扰,通知欄的高度考慮進去倦蚪。布局的內(nèi)容會在狀態(tài)欄,標題欄边苹,通知欄的下面陵且,不會被遮擋。
>但是在項目開發(fā)的過程中个束,突然發(fā)現(xiàn)對話框慕购,AlertDialog的內(nèi)容會超出背景大小,ProgressDialog的內(nèi)容會超出背景大小并且不居中播急。
>也是很偶然才發(fā)現(xiàn)是這個屬性造成的脓钾。我也沒理清楚,大概是這個屬性也使對話框考慮了系統(tǒng)的一些元素的緣故桩警。
>所以我們在使用這個屬性的時候不用直接把這個屬性加到theme中可训。在相關(guān)的布局layout中使用就可以了。
* Android Toast顯示文字超出了背景,文字布局中
>項目中突然出現(xiàn)了上述的情況握截,先開始以為是theme的問題飞崖,但是查了很久的資料,也做了很多實驗谨胞,但是沒有效果固歪,還是之前的樣子。一個很偶然的情況胯努,```Toast.makeText(getActivity(), “密碼不可為空”,Toast.LENGTH_SHORT).show();```改成了```Toast.makeText(App.getInstance(), “密碼不可為空”,Toast.LENGTH_SHORT).show();```發(fā)現(xiàn)就可以了牢裳。
>別問我,我也不知道原因叶沛。
>但是這提醒我們蒲讯,以后的Toast 的上下文參數(shù),直接用ApplicationContext就對了灰署。
Copyright (c) 2016 Copyright Holder All Rights Reserved.