使用主题的彩色Android启动画面

时间:2018-03-03 20:55:33

标签: android xamarin.forms xamarin.android

在我的Xamarin Forms Android应用程序中,我想根据用户在运行时选择的主题更改启动画面的颜色。此更改应该会影响应用程序的下一次运行。

我尝试使用内置的splash_screen.xml并使用Splash.axml文件,但我无法弄清楚如何(如果可能的话)将启动画面的背景颜色设置为主题中定义的颜色。

这可能吗?

2 个答案:

答案 0 :(得分:0)

  

我尝试使用内置的splash_screen.xml并使用Splash.axml文件,但我无法弄清楚如何(如果可能的话)将启动画面的背景颜色设置为主题中定义的颜色。

您可以为splashScreen定义主题,然后将android:windowBackground设置为特定颜色:

styles.xml:

<resources>
  <style name="AppTheme">
    <item name="android:windowBackground">@color/colorPrimary</item>
    <item name="android:windowNoTitle">true</item>
  </style>
  <style name="AppTheme2">
    <item name="android:windowBackground">@color/colorAccent</item>
    <item name="android:windowNoTitle">true</item>
  </style>
  ...
</resources>

SplashScreen.cs(不要忘记将SplashScreen活动设置为mainlauncher):

[Activity(Label = "SplashActivity",MainLauncher =true)]
public class SplashActivity : Activity
{
    protected override void OnCreate(Bundle savedInstanceState)
    {
        ISharedPreferences preferences=GetSharedPreferences("SplashThemeId", FileCreationMode.Private);
        var themeName=preferences.GetString("themeName","AppTheme");
        int themeId = Resource.Style.AppTheme ;
        switch (themeName)
        {
            case "AppTheme":
                themeId = Resource.Style.AppTheme;
                break;
            case "AppTheme2":
                themeId = Resource.Style.AppTheme2;
                break;
        }
        SetTheme(themeId);
        base.OnCreate(savedInstanceState);
        ...

正如您所注意到的,我使用SharedPreference在运行时存储用户选择的主题。您也可以将Android Settings用于相同目的。

这是完整的demo。它是原生的android项目,但它与表单项目相同。

答案 1 :(得分:0)

在我完成的所有研究以及我在代码中尝试过的事情之后,我得出的结论是,无法动态设置初始活动的颜色。我会用中性颜色来飞溅。