android 混合开发 跳转 Flutter 黑屏问题解决办法

  • AndroidManifest添加meta-data:
<meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true"/>
  • 修改主题FlutterActivity 将背景和主题均设置为透明 :
 <item name="android:windowBackground">@color/color_00000000</item>
 <item name="android:windowIsTranslucent">true</item>

如果这两个不同时设置成透明的话,可能都会显示为黑屏

完整的主题代码:

<style name="FlutterTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@color/color_00000000</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
    </style>

AndroidManifest 完整代码:

<activity
            android:name=".activity.MainFlutterActivity"
            android:launchMode="singleTop"
            android:screenOrientation="portrait"
            android:theme="@style/FlutterTheme"
            android:windowSoftInputMode="adjustResize|stateHidden">
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true"/>
        </activity>
  • 初始化布局时,需要先隐藏,在第一贞绘制之后,再显示。 代码如下:
FlutterView mFlutterView = Flutter.createView(this, getLifecycle(), toPage);
            GeneratedPluginRegistrant.registerWith(mFlutterView.getPluginRegistry());
            ViewG
roup.LayoutParams mParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT);

            RelativeLayout layout_view = findViewById(R.id.layout_view);
            layout_view.addView(mFlutterView, mParams);

            final FlutterView.FirstFrameListener[] listeners = new FlutterView.FirstFrameListener[1];
           listeners[0] = new FlutterView.FirstFrameListener() {
                @Override
                public void onFirstFrame() {
                    layout_view.setVisibility(View.VISIBLE)
                }
            };
            mFlutterView.addFirstFrameListener(listeners[0]);

R.id.layout_view 是根布局的 id

参考文章:
https://blog.csdn.net/u010479969/article/details/81673711
https://www.jianshu.com/p/218d4414185c

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐