美文网首页
RN安卓ios启动白屏(statusbar空白)和启动图全屏和i

RN安卓ios启动白屏(statusbar空白)和启动图全屏和i

作者: HT_Jonson | 来源:发表于2020-03-15 13:42 被阅读0次

之前一直使用的是这个插件
react-native-splash-screen
RN0.59前使用还是可以的,问题不是很多.
RN0.60之后貌似有些东西改变了,造成闪白情况.
苹果公司也提醒了开发者,2020年4月 弃用LaunchImage
改用 LaunchScreen.storyboard 加载启动图.
还有个问题就是 安卓启动图无法全屏,安卓的statusbar 会多出来一块无法全屏.

下面就来写一下个人的处理和解决方案.
首先,iOS
不墨迹了 直接上图吧

iOS先创建一个launch screen 文件

image.png image.png

先把这2个RN 的东西都删除调

你应该已经有了 UI给你的图片
先添加Imageview


image.png

拖动边缘把适配做好(这里不懂得小伙伴可以看看iOS原生)


image.png

设置图片的的 Content Mode 为 Aspect Fill


image.png

在 Assets.xcassets 中 New Image Set


image.png

把图片放进来,
这里我锁边找张图代替


image.png

大概就是这个样子 会报黄色警告

进入图片文件夹中,编辑 Contents.json,把里面的内容改成如下内容:


image.png

打开contents.json 文件编辑
把对应的编号都放进去

{
  "images" : [
    {
      "idiom" : "iphone",
      "filename" : "iphone1.jpg",
      "scale" : "1x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphone4.jpg",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "subtype" : "retina4",
      "scale" : "1x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphone5s.jpg",
      "subtype" : "retina4",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "subtype" : "retina4",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphone8p.jpg",
      "subtype" : "736h",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphone8.jpg",
      "subtype" : "667h",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphonex.jpg",
      "subtype" : "2436h",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphonexsmax.jpg",
      "subtype" : "2688h",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "filename" : "iphonexr.jpg",
      "subtype" : "1792h",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone5s.jpg",
      "subtype" : "retina4",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

最后变成了这样


image.png

添加图片


image.png

到这里 iOS就结束了,用了自己带的约束文件来做的适配.的确方便很多

下面是安卓
安卓呢我们就要使用一个第三方来做这个东西了,
以前的react-native-splash-screen不维护了,再介绍个新的给小伙伴

现在推荐一款一直在维护的 react-native-bootsplash

老规矩

android

yarn add react-native-bootsplash

这里我手动添加,如果使用link 可能对现有项目造成问题,小白的话建议继续看下去
android/settings.gradle 添加

include ':react-native-bootsplash'
project(':react-native-bootsplash').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-bootsplash/android')

android/app/build.gradle 添加

dependencies {
  // ...
  implementation project(':react-native-bootsplash')
}

MainApplication.java添加

import com.zoontek.rnbootsplash.RNBootSplashPackage; // <- add the RNBootSplashPackage import

public class MainApplication extends Application implements ReactApplication {

  // …

  @Override
  protected List<ReactPackage> getPackages() {
    @SuppressWarnings("UnnecessaryLocalVariable")
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // …
    packages.add(new RNBootSplashPackage());
    return packages;
  }

  // …
}

value/string.xml 添加

<resources>

    <!-- Base application theme -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Your base theme customization -->
        <!--        <item name="android:statusBarColor">@color/catalyst_redbox_background</item>-->
        <!--        <item name="android:windowTranslucentStatus">false</item>-->
        <!--        <item name="android:windowTranslucentStatus">true</item>-->

    </style>

    <!-- Add the following lines -->
    <!-- BootTheme should inherit from AppTheme -->
    <style name="BootTheme" parent="AppTheme">
        <!-- set the generated bootsplash.xml drawable as activity background -->
        <item name="android:background">@drawable/launch</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <!--        <item name="android:windowDrawsSystemBarBackgrounds">true</item>-->
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>

</resources>

androidManifest.xm

<activity
            android:name="com.zoontek.rnbootsplash.RNBootSplashActivity"
            android:theme="@style/BootTheme"> <!-- apply the theme you created at step 3. -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

MainActivity 添加

@Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//添加这里
    RNBootSplash.init(R.drawable.launch, MainActivity.this);

    if (Build.VERSION.SDK_INT >= 21) {
      View decorView = getWindow().getDecorView();
      int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
              | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
      decorView.setSystemUiVisibility(option);
      getWindow().setStatusBarColor(Color.TRANSPARENT);
    }

ios

ios/Podfile 
target 'YourAwesomeProject' do
  # …
  pod 'RNBootSplash', :path => '../node_modules/react-native-bootsplash'
end

到此为止就解决了 安卓启动图全屏问题.
iOS 就使用它自己的 storyboard 来启动.

相关文章

网友评论

      本文标题:RN安卓ios启动白屏(statusbar空白)和启动图全屏和i

      本文链接:https://www.haomeiwen.com/subject/xsjmshtx.html