我需要避免双闪屏问题在android- 12 API Xamarin表单

bnlyeluc  于 2022-12-07  发布在  Android
关注(0)|答案(2)|浏览(173)

SplashActivity.cs

namespace Splash12.Droid { [Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)] public class SplashActivity : AppCompatActivity { static readonly string TAG = "X:" + typeof(SplashActivity).Name;

public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
    {
        base.OnCreate(savedInstanceState, persistentState);
        Log.Debug(TAG, "SplashActivity.OnCreate");
    }

    // Launches the startup task
    protected override void OnResume()
    {
        base.OnResume();
        Task startupWork = new Task(() => { SimulateStartup(); });
        startupWork.Start();
    }

    // Simulates background work that happens behind the splash screen
    async void SimulateStartup()
    {
        Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
        await Task.Delay(8000); // Simulate a bit of startup work.
        Log.Debug(TAG, "Startup work is finished - starting MainActivity.");
        StartActivity(new Intent(Application.Context, typeof(MainActivity)));
    }
}

}

MainActivity.cs

[Activity(Label = "Splash12", Theme = "@style/MainTheme", Icon = "@mipmap/icon", MainLauncher = false, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
        LoadApplication(new App());
    }
    public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
    {
        Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

        base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

}

styles.xml

<style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowBackground">@drawable/splash_screen</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowActionBar">true</item>
</style>

splash_screen.xml

u3r8eeie

u3r8eeie1#

这不是在Android 12上做闪屏的方式。
请查看https://github.com/gmck/XamarinBasicSplashScreen上的示例XamarinBasicSplashScreen。
更多文档https://developer.android.com/develop/ui/views/launch/splash-screen/migrate

cngwdvgl

cngwdvgl2#

在Android 12中,它有自己的闪屏,这是Android提供等待应用程序启动的加载视图的方式。
因此,您添加了另一个闪屏,导致出现两个闪屏的问题。
为了解决这个问题,您可以将下面的代码添加到您的style.xml中。

<style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_screen</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowActionBar">true</item>

        <item name="android:windowIsTranslucent">true</item>
</style>

这段代码<item name="android:windowIsTranslucent">true</item>可以让Android 12的闪屏变得透明,所以你只能看到你的闪屏。

相关问题