Android 11版本如何实现沉浸式导航栏
时间: 2024-05-10 19:16:10 浏览: 87
在 Android 11 中,实现沉浸式导航栏可以通过以下步骤:
1. 在主题中设置 `android:windowTranslucentNavigation` 为 `true`,表示导航栏透明。
2. 在布局文件中设置根布局的 `android:fitsSystemWindows` 为 `true`,表示布局会在系统窗口之上进行绘制,避免内容被导航栏覆盖。
3. 可以通过在 `Activity` 的 `onWindowFocusChanged` 方法中判断导航栏是否显示来动态调整布局。
4. 如果需要在导航栏上添加自定义的内容,可以通过 `WindowManager.LayoutParams` 中的 `FLAG_LAYOUT_IN_SCREEN` 和 `FLAG_LAYOUT_NO_LIMITS` 标志来实现。
下面是一个简单的实现示例:
在 `styles.xml` 文件中设置主题:
```xml
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:windowTranslucentNavigation">true</item>
</style>
```
在布局文件中设置根布局:
```xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<!-- 内容布局 -->
</LinearLayout>
```
在 `Activity` 中动态调整布局:
```java
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
View decorView = getWindow().getDecorView();
int uiOptions = decorView.getSystemUiVisibility();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
} else {
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
}
decorView.setSystemUiVisibility(uiOptions);
}
}
```
如果需要在导航栏上添加自定义的内容,可以在布局文件中添加:
```xml
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- 内容布局 -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:text="自定义内容"
android:textColor="@android:color/white"
android:textSize="18sp" />
</FrameLayout>
```
然后在 `Activity` 中添加:
```java
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
getWindow().setAttributes(layoutParams);
```
阅读全文