您的位置:

fitssystemwindows的使用场景和实现方式

一、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主题时,需要注意以下几点:

  • 必须使用系统的statusBarColornavigationBarColor设置状态栏和导航栏的颜色。
  • 如果需要控制状态栏和导航栏的透明度,可以使用android:statusBarColorandroid:navigationBarColor属性配合实现。
  • 使用NoActionBar.FullScreen主题时,Activity本身没有自带的ActionBar,因此如果需要使用ActionBar相关的功能,可以在布局中手动添加Toolbar。

3、与透明主题的结合使用

如果需要在全屏状态下使用透明主题,需要特别注意一些问题:

  • 透明主题时,Activity的背景透明,如果要有效地使用fitssystemwindows属性,需要保证布局背景非透明。
  • 如果使用了Translucent状态栏和导航栏,一定要在布局中加入一个顶部padding值和底部margin值,否则布局会被状态栏和导航栏遮挡。

四、小结

通过以上介绍,我们可以发现,fitssystemwindows属性在处理Android应用全屏显示时与系统UI交互的问题非常有用。通过设置此属性,可以避免应用在全屏状态下被系统UI遮挡的问题,提高用户体验。但是,在使用此属性时,需要特别注意一些问题,保证布局可以正确显示。