在android的XML中設(shè)置fitsSystemWindows的分析,
網(wǎng)上的文章都說得不太清楚
fitsSystemWindows只作用在sdk>=19的系統(tǒng)上就是高于4.4的系統(tǒng)
android:fitsSystemWindows="true"
這個屬性可以給任何view設(shè)置,只要設(shè)置了這個屬性此view的所有padding屬性失效.
只有在設(shè)置了透明狀態(tài)欄(StatusBar)或者導(dǎo)航欄(NavigationBar)此屬性才會生效
1. 當(dāng)設(shè)置了透明狀態(tài)欄(StatusBar)時:
當(dāng)為此activity設(shè)置了
<item name="android:windowTranslucentStatus">true</item>
//或者
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
//如果有以上兩種情況之一,我們的狀態(tài)欄(StatusBar)就會變成透明,并且布局會擴(kuò)展到StatusBar的位置
同時,所有設(shè)置了android:fitsSystemWindows="true"屬性的view會自動添加一個值等于狀態(tài)欄高度的paddingTop
2. 當(dāng)設(shè)置了透明導(dǎo)航欄(NavigationBar)時:
當(dāng)為此activity設(shè)置了:
<item name="android:windowTranslucentNavigation">true</item>
//或者
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
//如果有以上兩種情況之一,我們的導(dǎo)航欄(NavigationBar)就會變成透明,并且布局會擴(kuò)展到NavigationBar的位置
同時,所有設(shè)置了android:fitsSystemWindows="true"屬性的view會自動添加一個值等于導(dǎo)航欄高度的paddingBottom
附加一個獲取statusbar的和一個獲取NavigationBar高度的java代碼:
public float getStatusBarHeight() {
float result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimension(resourceId);
}
return result;
} //返回值就是狀態(tài)欄的高度,得到的值是像素
public float getNavigationBarHeight() {
float result = 0;
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimension(resourceId);
}
return result;
} //返回值就是導(dǎo)航欄的高度,得到的值是像素