android中fitsSystemWindows的用处

来源:互联网 发布:bgp是什么网络类型 编辑:程序博客网 时间:2024/04/26 21:25

在android的XML中设置fitsSystemWindows的分析,

网上的文章都说得不太清楚

fitsSystemWindows只作用在sdk>=19的系统上就是高于4.4的系统

android:fitsSystemWindows="true"

这个属性可以给任何view设置,只要设置了这个属性此view的所有padding属性失效.

只有在设置了透明状态栏(StatusBar)或者导航栏(NavigationBar)此属性才会生效

1. 当设置了透明状态栏(StatusBar)时:

当为此activity设置了

<item name="android:windowTranslucentStatus">true</item>//或者if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}//如果有以上两种情况之一,我们的状态栏(StatusBar)就会变成透明,并且布局会扩展到StatusBar的位置

同时,所有设置了android:fitsSystemWindows=”true”属性的view会自动添加一个值等于状态栏高度的paddingTop

2. 当设置了透明导航栏(NavigationBar)时:

当为此activity设置了:

<item name="android:windowTranslucentNavigation">true</item>//或者if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);}//如果有以上两种情况之一,我们的导航栏(NavigationBar)就会变成透明,并且布局会扩展到NavigationBar的位置

同时,所有设置了android:fitsSystemWindows=”true”属性的view会自动添加一个值等于导航栏高度的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;}   //返回值就是状态栏的高度,得到的值是像素
public float getNavigationBarHeight() {    float result = 0;    int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");    if (resourceId > 0) {        result = getResources().getDimension(resourceId);    }    return result;}   //返回值就是导航栏的高度,得到的值是像素
0 0
原创粉丝点击