最近在研究沉浸式狀態(tài)欄圃验,fitSystemtWindow在沉浸式狀態(tài)欄中發(fā)揮重要作用檀头,網(wǎng)上介紹的真的很混亂宜鸯。在此腾供,將親身實(shí)踐總結(jié)一下仆邓,供大家參考
fitSystemWindow是什么
設(shè)置應(yīng)用布局時(shí)是否考慮系統(tǒng)窗口布局;如果為true伴鳖,將調(diào)整系統(tǒng)窗口布局以適應(yīng)你自定義的布局节值。
fitSystemWindow生效條件
- android:fitSystemWindow屬性,只有在 sdk>=19,即系統(tǒng)版本大于等于4.4才會(huì)生效榜聂。
- 只有在設(shè)置了StatusBar或者NavigationBar為透明時(shí)生效
使用方法
1搞疗、設(shè)置狀態(tài)欄透明方法(StatusBar透明)
在設(shè)置activity主題添加下邊的屬性:
<item name="android:windowTranslucentStatus">true</item>
或者在java代碼中設(shè)置以下屬性:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
此時(shí),fitSystemWindow設(shè)置為true時(shí)峻汉,控件的padding設(shè)置會(huì)失效贴汪,自動(dòng)添加一個(gè)值等于狀態(tài)欄高度的paddingTop
2、設(shè)置底部導(dǎo)航欄透明方法(NavigationBar透明)
在activity的主題中設(shè)置以下屬性:
<item name="android:windowTranslucentNavigation">true</item>
//或者在代碼中添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
此時(shí)休吠,android:fitsSystemWindows="true"屬性的view會(huì)自動(dòng)添加一個(gè)值等于導(dǎo)航欄高度的paddingBottom
具體操作例子
MainActivity.kt代碼
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)//設(shè)置狀態(tài)欄透明
setContentView(R.layout.activity_main)
}
}
布局文件activity_main代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
android:orientation="vertical"
android:fitsSystemWindows="true" //fitSystemWindow為true扳埂,對(duì)應(yīng)下邊第一張圖
android:fitsSystemWindows="false" //fitSystemWindow為false,對(duì)應(yīng) 下邊 第二張圖
tools:context="com.baixin.statusbar.statusbaroperate.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@android:color/darker_gray"
android:gravity="center"
android:text="標(biāo)題" />
</LinearLayout>
運(yùn)行效果如下,可以看出LinearLayout自動(dòng)多出了一個(gè)Paddingtop,高度為StatusBar的高度: