Цвет фона активности заставки

У меня проблема с моим заставкой на Android. Всплывающий экран отображается пользователю во время длительного запуска приложения, но фон активности всегда черный. Я имею в виду фоновое растровое изображение (всплеск изображения), но фон черный, а не белый. Я использую PNG-изображение с прозрачностью.

Что у меня:

  • Изображение с заставкой PNG с прозрачным фоном
  • Активность заставки экрана
    [Activity(MainLauncher = true, Theme = "@style/Theme.Splash", NoHistory = true)]
    public class SplashScreen : Activity
    {
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Do your app initialization here
            // Other long running stuff

            // Run app when done
            StartActivity(typeof(MainForm));
        }
    }
  1. Стиль темы для активности заставки в ресурсах/значениях/styles.xml
    <resources>
      <style name="Theme.Splash" parent="@android:style/Theme.Holo.Light">
        <item name="android:windowBackground">@drawable/splash_centered</item>
        <item name="android:windowNoTitle">true</item>
      </style>
    </resources>
  1. Брызги в ресурсах /drawable/splash _centered.xml
    <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
        android:src="@drawable/splash"
        android:gravity="center"
        android:background="@color/white"> <!-- this is ignored -->

Проблема: Как вы можете видеть, я использую Theme.Holo.Light как родительскую тему, и я использую ее в остальном приложении. Холо-свет использует белый фон. Этот белый фон не применяется к фону SplashActivity. Фон SplashActivity всегда черный. Фоновый битмап (всплеск изображения) виден, но фон черный, а не белый. Я использую PNG-изображение с прозрачностью.

Вопрос: Как установить цвет фона темы Holo.Light по умолчанию (белый) в активности SplashScreen?

Примечание: Я использую Xamarin.Android, но стилизация распространена для платформы Android. Android версии 4 и выше.

Ответ 1

В ресурсах /drawable/splash _centered.xml вместо растрового изображения используйте список слоев

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="@android:color/white" />
    </shape>
  </item>
  <item>
    <bitmap android:gravity="center" android:src="@drawable/splash" />
  </item>
</layer-list>

Ответ 2

Вот как я смог получить белый фон всплеск (с логотипом в центре) в Xamarin.

[Activity (Theme= "@style/Theme.Splash", MainLauncher=true, NoHistory=true)]            
public class SplashActivity : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.splash);
        ThreadPool.QueueUserWorkItem (o => LoadActivity ());
        // Create your application here
    }
    private void LoadActivity() {
        Thread.Sleep (1000); // Simulate a long pause
        RunOnUiThread (() => StartActivity (typeof(MainActivity)));
    }
}

с Theme.Splash как:

<resources>
  <style name="Theme.Splash" parent="@android:style/Theme.Light">
    <item name="android:colorBackground">@android:color/white</item>
    <item name="android:windowNoTitle">true</item>
  </style>
</resources>

и splash.axml(Theme.Light.NoTitleBar) как:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:minWidth="25px"
    android:minHeight="25px"
    android:gravity="center">
    <ImageView
        android:src="@drawable/splash"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView1"
        android:layout_gravity="center" />
</LinearLayout>

NB: есть небольшая задержка в всплеске png (логотип), чтобы подняться, но ее все еще приемлемо, лучше, чем на черном фоне.