23

アクティビティのテーマ/スタイルで背景画像を使用するにはどうすればよいですか?Androidのアクティビティの背景画像

私はこの使用して色を行う場合は、次の

<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です。

+0

誰もがここでこれを読んでために...あなたがカスタマイズしたAppThemeとしてwindowBackgroundに使用し、あなたの描画可能な、完全にあなたのヒープにロードをデコードされることに注意してください。 90KiBのようなサイズの小さな画像でさえ、実行時に行われるデコードのために90MiB以上の割り当てが可能です。これにより、OutOfMemoryの問題が光より速く発生します。 :) – JacksOnF1re

+0

詳細については、この記事をお読みくださいスプラッシュ画面を正しく設定する方法:https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – JacksOnF1re

答えて

9

私はテーマや何かを使用していないので、私はそれがこれをどのように影響するかわからないんだけど、私はこのように私の背景を設定:のonCreate

+3

私はこの方法を推奨しません。それはテーマです。それは、コードが実行されるときに短い瞬きを見るのではなく、アクティビティが開始されたときにAndroidがすぐにそれを表示できるようにします。 –

16

getWindow().setBackgroundDrawableResource(R.drawable.background_image); 

私もドン」トンの使用のテーマ、活動のレイアウトに私は私のアプリの初期活性のように見えたし、同じ問題に遭遇したスプラッシュイメージを持つことが必要

android:background="@drawable/splash_image" 
+4

ありがとうございましたが、レイアウトの内容が遅れているのでテーマを使用する必要があります。アンドロイド用のモノでは、起動に数秒間の遅延があります。私はランタイムが実際に開始される前に画像を表示させる必要があります。レイアウトはランタイムの開始後にのみ適用されるため、テーマがすぐに適用されるため、テーマを使用する必要があります。 – Matthew

+0

問題ありません。私はテーマを探しています。私は質問したので、私がそれを理解すれば私はあなたに戻ってきます。 – VicVu

+0

これで運がいい? – Matthew

4

を追加することになりそう。私はwindowBackgroundの代わりにwindowContentOverlayで幸運を祈る。 drawableは、実際のレイアウトと同じ位置にステータスバーの下に現れました。 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 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> 

私はアクションバーにも、いくつかの組み込みの方法があると考えていあなたのアプリがそれを使用する場合、これを処理する。 MonoIO sampleにはこのような起動イメージがあるようです。

+0

splash.xmlにテキストビューを追加することはできますか?私はロゴと接続テキストなどのスプラッシュ画面を表示する必要があります。 – v4r

+0

このソリューションでは、画面の幅に合わせて縦横比を維持するため、背景イメージのサイズを変更する方法は? – pfaehlfd

+0

私は長年に亘ってAndroidの開発を行っていません。新しいStackOverflowの質問をお勧めします。 – t9mike

6

私の解決策は、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>