一、fitssystemwindows的作用
fitssystemwindows
是Android中的一个非常有用的属性,可以用来处理全屏显示时与系统UI(通知栏和导航栏)的交互问题。当应用处于全屏状态下时,如果使用原生的布局方式,那么在布局的顶部和底部会被系统UI遮挡,从而影响到用户体验。而fitssystemwindows
属性的作用就是可以让应用在全屏状态下,仍然可以与系统UI进行交互,即避免被系统UI遮挡。
二、fitssystemwindows的实现方式
1、在布局文件中使用fitssystemwindows
使用fitssystemwindows
非常简单,可以直接在布局文件中通过设置顶级元素的android:fitsSystemWindows
属性来实现。可以使用以下方式:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:fitsSystemWindows="true">
<Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 需要显示的内容 -->
</FrameLayout>
</LinearLayout>
在以上布局中,LinearLayout
是我们的顶层容器,设置了android:fitsSystemWindows="true"
来告诉系统此容器要处理与系统UI的交互问题。
2、通过代码来设置fitssystemwindows
如果我们需要在代码中动态设置fitssystemwindows
属性,我们可以使用View.setFitsSystemWindows(boolean)
方法,具体实现方法如下:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
View rootView = findViewById(R.id.root_view);
rootView.setFitsSystemWindows(true); // 设置为true,避免被系统UI遮挡
}
}
在以上代码中,我们首先找到根布局的View对象,然后调用setFitsSystemWindows(true)
方法,将其设置为 true
,从而实现避免被系统UI遮挡的效果。
三、fitssystemwindows使用时的注意事项
1、fitssystemwindows的布局层级位置
设置fitssystemwindows
属性时,它的作用是向顶级元素告诉系统此容器要处理与系统UI的交互问题。因此,fitssystemwindows
属性应该设置在最外层的容器上,如果设置在内层容器上,是不起作用的。例如,在以下代码中,设置android:fitsSystemWindows="true"
的作用是无效的。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- 显示内容 -->
</FrameLayout>
</LinearLayout>
</RelativeLayout>
在上面的代码中,android:fitsSystemWindows="true"
应该设置在RelativeLayout
上才能生效。
2、配合SystemUI的专用主题
使用fitssystemwindows
属性时,应该在布局中配合使用SystemUI相关的专用主题。例如使用NoActionBar.FullScreen
主题时,需要注意以下几点:
- 必须使用系统的
statusBarColor
和navigationBarColor
设置状态栏和导航栏的颜色。 - 如果需要控制状态栏和导航栏的透明度,可以使用
android:statusBarColor
和android:navigationBarColor
属性配合实现。 - 使用
NoActionBar.FullScreen
主题时,Activity本身没有自带的ActionBar,因此如果需要使用ActionBar相关的功能,可以在布局中手动添加Toolbar。
3、与透明主题的结合使用
如果需要在全屏状态下使用透明主题,需要特别注意一些问题:
- 透明主题时,Activity的背景透明,如果要有效地使用
fitssystemwindows
属性,需要保证布局背景非透明。 - 如果使用了Translucent状态栏和导航栏,一定要在布局中加入一个顶部padding值和底部margin值,否则布局会被状态栏和导航栏遮挡。
四、小结
通过以上介绍,我们可以发现,fitssystemwindows
属性在处理Android应用全屏显示时与系统UI交互的问题非常有用。通过设置此属性,可以避免应用在全屏状态下被系统UI遮挡的问题,提高用户体验。但是,在使用此属性时,需要特别注意一些问题,保证布局可以正确显示。