web-dev-qa-db-ja.com

Android:起動したアクティビティにウィンドウの背景を設定する

それで、私はRomain Guyのウィンドウの背景とパフォーマンスの設定に関するRomain Guyの ブログ投稿 を読み、それをエミュレートしようとしています。それはそのような単純な解決策であり、なぜ私がこれを機能させることができないのかはわかりませんが、アクティビティは指示された背景の取得を拒否します。

OnListItemClickが新しいアクティビティを起動するListViewがあります。これは、完全に読み込まれるまで3〜5秒かかります。ユーザーが待機している間にwindowBackgroundを描画して、実際に準備が整う前にアクティビティを「確認」できるようにしたいと思います。これが私のコードです:

起動したアクティビティのAndroidManifestスニペット:

<activity 
        Android:name=".activity.EditorActivity"
        Android:screenOrientation="portrait"
        Android:windowBackground="@drawable/background_editor">

EditorActivityのXMLレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">
    <TextView 
    Android:id="@+id/editor"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:text="Editor" />
</FrameLayout>

そして最後に、マニフェストbackground_editor.xmlに設定されたドローアブル:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:src="@drawable/editor_bg"
    Android:tileMode="repeat" />

editor_bgは、ドローアブルフォルダーにある.pngファイルです。

最終的にEditorActivityが起動し、デフォルトの黒い背景に「Editor」テキストが白く表示されます(XMLファイルが正しくロードされていることをテストするために追加しました)。

Android:background = "@ Android:color/transparent"を介してFrameLayoutとTextViewの背景を透明に設定してみましたが、デフォルトで黒の背景に設定されていたかもしれませんが、うまくいきませんでした。

数日が経ちましたが、私は何か単純なことを見逃していると思います...ここで私がしている明らかな間違いはありますか?

25
Paul Mennega

プログラムで新しいアクティビティを起動する前に、ウィンドウの背景を設定してみてください。

getWindow().setBackgroundDrawableResource(R.drawable.my_drawable);
53
Zarokka

私は同じ問題に遭遇し、その日を無駄にしました。 Javaではテーマを設定できません。私の場合のように、コントロールがスプラッシュアクティビティのonCreateに非常に遅れて到着しました。その時まで、黒い画面が表示され続けます。

これにより、マニフェストで指定するテーマからウィンドウを管理する必要があるという手がかりが得られました。

私が持っているマニフェストがあります:

<activity
        Android:name=".main.activities.SplashScreen"
        Android:theme="@style/Splash"
        Android:screenOrientation="portrait">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

今私が作成したテーマは次のとおりです:

<style name="Splash" parent="@style/Theme.AppCompat.Light">
    <item name="Android:windowBackground">@drawable/splash</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/green_09</item>
    <item name="colorPrimary">@color/green_09</item>
    <item name="windowActionBar">false</item>
</style>

ビットマップリソースを含むドローアブルリソースのスプラッシュ。少し伸ばさずに中央に表示されるように微調整する必要があります。

<bitmap xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:antialias="true"
    Android:dither="true"
    Android:gravity="fill"
    Android:src="@drawable/splash_screen" />
4
Gem

私がこれをstyles.xmlのテーマスタイルで宣言した場合、私にとってはうまくいきます:

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

    <style name="CustomTheme" parent="Android:Theme.Holo.NoActionBar">
        <item name="Android:windowBackground">@color/bg_evening</item>
    </style>

</resources>

そしてマニフェストでこのテーマを私のアプリケーションに設定しました:

<application
    Android:name="com.my_app.pack"
    Android:theme="@style/CustomTheme" >
...

または私の活動の1つに:

<activity
    Android:name="..."
    Android:theme="@style/CustomTheme">
...

複数のテーマスタイルを宣言し、それらのいずれか1つを任意のアクティビティに追加できます。これにより、アプリケーションに設定されたテーマがオーバーライドされます。

2