fitsSystemWindows属性在Android中主要用于设置view的布局,使其能够根据系统窗口(如状态栏、导航栏等)进行调整。这个属性可以应用于任何view,但需要注意的是,只有当设置了透明状态栏或导航栏时,该属性才会生效。此外,fitsSystemWindows属性仅适用于Android 4.4及以上版本。

应用场景主要包括:

1. 在不同Android版本下,适配App状态栏和系统本身的状态栏;

2. 兼容带有底部虚拟按键的手机系统。

属性使用示例:

默认效果:

未对系统状态栏和导航栏做透明设置时的布局效果图。

系统窗口透明后效果:

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

以下是透明状态栏和导航栏的代码设置示例:

```java

// 布局设置

true

// 或者代码设置(针对Android 7.0及以下版本)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

```

```java

// 布局设置

true

// 或者代码设置(针对Android 7.0及以下版本)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

```

在Android开发中,要实现状态栏(StatusBar)或导航栏(NavigationBar)变为透明并使布局扩展到它们的上方,可以通过以下两种方法实现:

方法一:使用布局设置

在布局文件中添加如下代码:

```xml

true

```

或者使用代码设置:

```java

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

}

```

这种方法适用于Android 4.4及以上版本。根据Android版本的不同,状态栏和导航栏的透明样式也会有所不同。在5.0及以上版本的模拟器上进行测试时,导航栏是半透明的。

方法二:设置fitsSystemWindows属性

在根布局中添加如下代码:

```xml

...

android:fitsSystemWindows="true">

...

```

设置了`android:fitsSystemWindows="true"`属性后,针对透明的状态栏会自动添加一个值等于状态栏高度的paddingTop;针对透明的系统导航栏会自动添加一个值等于导航栏高度的paddingBottom。这样可以使布局延伸到状态栏或导航栏的位置,同时保持它们的透明效果。

解析:这个XML代码是一个Android的LinearLayout布局,包含三个TextView子视图。每个TextView有自己的背景颜色和文本内容。LinearLayout是垂直方向的,宽度和高度都设置为Match Parent(即填充整个父元素)。

代码:

```xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="45dp"

android:background="#66FF4081"

android:gravity="center"

android:text="App标题栏"

android:textSize="30sp"/>

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:background="#0CE3EE"

android:gravity="center"

android:text="App内容部分"

android:textSize="30sp"/>

android:layout_width="match_parent"

android:layout_height="45dp"

android:background="#4188F8"

android:gravity="center"

android:text="App导航栏"

android:textSize="30sp"/>

```

```java

import android.content.Context;

import android.view.WindowManager;

public class StatusBarNavigationBarUtil {

public static float getStatusBarHeight(Context context){

float result = 0;

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

if (resourceId > 0){

result = context.getResources().getDimension(resourceId);

}

return result;

}

public static float getNavigationBarHeight(Context context){

float result = 0;

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

if (resourceId > 0){

result = context.getResources().getDimension(resourceId);

}

return result;

}

}

```