适配框架

android:fitsSystemWindows="

2019-08-16  本文已影响4人  周蛋蛋

今天在使用属性的时候,使用了这个属性,但是发现布局引起错乱,有一部分最顶上的布局不见了,最后看到属性里面有这个属性,特来说明一下

注意: fitsSystemWindows只作用在Android4.4及以上的系统,因为4.4以下的系统StatusBar没有透明状态。
image.png

属性使用

1、默认效果

先贴一张未对系统状态栏和导航栏做透明设置时测试布局效果图:


image.png

如果你有设置透明,却设置了这个属性。会导致向上偏移的

2、系统窗口透明后效果

当设置了透明状态栏(StatusBar)和透明导航栏(NavigationBar)时效果图:

这里写图片描述

3、添加属性后效果

image.png

设置了android:fitsSystemWindows=”true”属性后针对透明的状态栏会自动添加一个值等于状态栏高度的paddingTop;针对透明的系统导航栏会自动添加一个值等于导航栏高度的paddingBottom

所以,如果设置了透明的话就可以用,不然就别用


//返回值就是状态栏的高度,得到的值单位px

public float getStatusBarHeight() {

    float result = 0;

    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");

    if (resourceId > 0) {

        result = getResources().getDimension(resourceId);

    }

    return result;

}   
 //返回值就是导航栏的高度,得到的值单位px

public float getNavigationBarHeight() {

    float result = 0;

    int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");

    if (resourceId > 0) {

        result = getResources().getDimension(resourceId);

    }

    return result;

}  

//布局设置
<item name="android:windowTranslucentStatus">true</item>
//或者代码设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

//布局设置
<item name="android:windowTranslucentNavigation">true</item>
//或者代码设置
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
上一篇 下一篇

猜你喜欢

热点阅读