fitSystemWindow的用法

最近在研究沉浸式状态栏,fitSystemtWindow在沉浸式状态栏中发挥重要作用,网上介绍的真的很混乱。在此,将亲身实践总结一下,供大家参考


fitSystemWindow是什么

设置应用布局时是否考虑系统窗口布局;如果为true,将调整系统窗口布局以适应你自定义的布局。

fitSystemWindow生效条件

  • android:fitSystemWindow属性,只有在 sdk>=19,即系统版本大于等于4.4才会生效。
  • 只有在设置了StatusBar或者NavigationBar为透明时生效

使用方法

1、设置状态栏透明方法(StatusBar透明)

在设置activity主题添加下边的属性:
true

或者在java代码中设置以下属性:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}

此时,fitSystemWindow设置为true时,控件的padding设置会失效,自动添加一个值等于状态栏高度的paddingTop
2、设置底部导航栏透明方法(NavigationBar透明)

在activity的主题中设置以下属性:
true
//或者在代码中添加:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}

此时,android:fitsSystemWindows="true"属性的view会自动添加一个值等于导航栏高度的paddingBottom

具体操作例子

MainActivity.kt代码

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)//设置状态栏透明

        setContentView(R.layout.activity_main)
    }
}

布局文件activity_main代码




    

运行效果如下,可以看出LinearLayout自动多出了一个Paddingtop,高度为StatusBar的高度:


fitSystemWindow的用法_第1张图片
image.png

fitSystemWindow的用法_第2张图片
image.png

你可能感兴趣的:(fitSystemWindow的用法)