文章

Android全面屏状态栏和底部全面屏手势指示条区域适配

Android全面屏状态栏和底部全面屏手势指示条区域适配

Android全面屏状态栏和底部全面屏手势指示条区域适配

Android全面屏状态栏和底部全面屏手势指示条区域适配

React Native 项目,一般顶部状态栏底部全面屏手势指示条区域不是透明的,看起来很难受。研究了一下这个问题,现在总结一下解决方案。

1729070284861-0e296b68-ceaa-4153-9a82-5ccd1f0c1ba2.jpeg1729070285521-07dc47b1-bd37-404b-aad8-1ae59eec53ee.jpeg1729070370674-f7293029-8bd3-494a-919c-a0f5541b128f.jpeg

顶部状态栏

顶部的状态栏可以使用 React Native 提供的 <StatusBar /> 组件实现透明,一般配合react-navigation使用:

1
2
3
4
5
6
7
8
9
10
<SafeAreaProvider>
  <NavigationContainer>
    <StatusBar
      translucent={true}
      backgroundColor={'transparent'}
      barStyle="dark-content"
    />
    ...
  </NavigationContainer>
</SafeAreaProvider>

底部手势指示条区域

打开 /android/app/src/main/java/包名/MainActivity.java

MainActivity.java 中的 MainActivity 类中实现重写 onCreate 方法

1
2
3
4
5
6
7
8
import android.os.Bundle;
import androidx.core.view.WindowCompat;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
}

打开 /android/app/src/main/res/values/styles.xml

styles.xml 中添加内容

1
2
3
4
5
6
7
8
9
<resources>
  <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
    <item name="android:windowDisablePreview">true</item>
    <!-- 关键:设置为透明 -->
    <item name="android:navigationBarColor">@android:color/transparent</item>
  </style>
</resources>

效果:

1729070617998-12a7bd70-41a2-4c03-bf4b-ac40ce7226fe.jpeg1729070617374-0c1f6068-34d7-4927-a458-3c591916213f.jpeg

使用 react-native-navigation-bar-color这个库好像也能处理这个问题 效果如下:

1729070740789-5d308d65-d5ac-4261-8039-1208e9351758.jpegscreenShot1

本文由作者按照 CC BY 4.0 进行授权