web-dev-qa-db-ja.com

スプラッシュスクリーンアクティビティの背景色

Androidのスプラッシュスクリーンに問題があります。スプラッシュ画面は、長いアプリケーションの起動中にユーザーに表示されますが、アクティビティの背景は常に黒です。背景ビットマップ(スプラッシュ画像)は表示されますが、背景は白ではなく黒です。透明度のあるPNG画像を使用しています。

私が持っているもの:

  1. 背景が透明なPNGスプラッシュスクリーン画像
  2. スプラッシュスクリーンアクティビティ
    [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. Resources/values/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. Resources/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画像を使用しています。

質問: SplashScreenアクティビティでデフォルトのHolo.Lightテーマの背景色(白)を設定する方法は?

注: Xamarin.Androidを使用していますが、スタイリングはAndroid platform。Androidバージョン4以降。

20
Ludwo

Resources/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>
33
Jon Canning

これが、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>

注意:スプラッシュpng(ロゴ)の起動にはわずかな遅延がありますが、黒の背景よりも優れています。

9
Shibbs

android:drawable = "@ color/colorWhite"をitemに設定します。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:drawable="@color/colorWhite" />

    <item>
        <bitmap
            Android:gravity="center"
            Android:src="@drawable/splash" />
    </item>
</layer-list>
0
Yang