Androidのスプラッシュスクリーンに問題があります。スプラッシュ画面は、長いアプリケーションの起動中にユーザーに表示されますが、アクティビティの背景は常に黒です。背景ビットマップ(スプラッシュ画像)は表示されますが、背景は白ではなく黒です。透明度のある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));
}
}
<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>
<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以降。
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>
これが、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(ロゴ)の起動にはわずかな遅延がありますが、黒の背景よりも優れています。
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>