アクティビティのテーマ/スタイルで背景画像を使用するにはどうすればよいですか?
色を使用してこれを行う場合:
<style name="CustomTheme" parent="Android:Theme.Light">
<item name="Android:windowBackground">@color/custom_theme_color</item>
</style>
正しく動作しますが、行を次のように置き換えた場合:
<item name="Android:windowBackground">@drawable/splash_image</item>
画像は正しく表示されますが、すべてのコンテンツが画面の左上隅の小さなブロックに押し込まれます。ステータスバーの下にある影も途切れたり、乱れたりします。
AndroidにMonoを使用しており、画像は有効な9パッチpngです。
テーマも使用しないので、アクティビティのレイアウトに追加します
Android:background="@drawable/splash_image"
私はテーマなどを使用しないので、これがどのように影響するかはわかりませんが、背景を次のように設定します。
getWindow().setBackgroundDrawableResource(R.drawable.background_image);
onCreate
私の解決策は、Android:windowBackgroundをAndroid:backgroundに変更することでした。
<?xml version="1.0" encoding="UTF-8" ?>
<resources>
<style name="Theme.Splash" parent="Android:Theme">
<item name="Android:background">@drawable/splash</item>
<item name="Android:windowNoTitle">true</item>
</style>
</resources>
アプリの初期アクティビティのように見え、同じ問題に遭遇したスプラッシュ画像が必要でした。 windowBackgroundの代わりにwindowContentOverlayを使用して幸運に恵まれました。ドロアブルは、実際のレイアウトとまったく同じ位置でステータスバーの下に表示されます。 Android 2.2、Android 3.0、およびAndroid 4.1。
これが私のスタイルです:
<style name="SplashTheme" parent="Android:style/Theme.Light">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowContentOverlay">@drawable/splash</item>
</style>
Splash.xmlのドロアブルは、layer-listを使用してユーザーインターフェイスヘッダーを模倣します。
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!--- Background; tile is broken on Android 2.2 so just have super wide background that will get clipped -->
<item>
<bitmap Android:gravity="top|left" Android:src="@drawable/splash_background" />
</item>
<!--- Icon left justified -->
<item>
<bitmap Android:gravity="top|left" Android:src="@drawable/header_icon" />
</item>
<!--- Buttons/etc right justified -->
<item>
<bitmap Android:gravity="top|right" Android:src="@drawable/splash_buttons" />
</item>
</layer-list>
アプリで使用している場合、ActionBarにはこれを処理する組み込みの方法もいくつかあると思います。 MonoIOサンプル は、そのような起動イメージを持っているようです。
Android:gravity="fill"
の代わりにAndroid:gravity="center"
を使用できます。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:opacity="translucent">
<item>
<bitmap
Android:gravity="fill"
Android:src="@drawable/splash_screen" />
</item>
</layer-list>
注:スプラッシュ画像の形状とサイズに依存します。私の場合、Android:gravity="fill"
を使用することで、私のスプラッシュは完璧に見えます。スプラッシュ画像のタイプに応じて、重力のさまざまな属性を使用できます。