11

appwidgetのテーマを定義し、それをアプリケーションレベルで適用しようとしています。私は次のようなテーマを持っています

<style name="theme.dark"> 
  <item name="android"background">#000000</item> 
</style> 

マニフェストでandroid:theme="@style/theme.dark"は、アプリケーションに設定しました。ただし、appwidgetを実行すると、スタイルからアイテムが取得されません。style="@style/theme.dark"ビューレイアウトの個々の要素を設定しようとしましたが、それは機能します...しかし、それは私が望んでいることではありません。ビュー内の要素ごとに特定のstyle="..."を呼び出したくありません。このページ、

http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

テーマ/スタイルを使用するための優れたサンプルアプリがあり、完全に機能します。唯一の違いは、それがアプリケーションであり、アプリケーションではなく、アクティビティにテーマを設定していることです。

また、ビューにアクセスする前に、appwidgetのonHandleUpdate()でsetTheme(...)を使用して、プログラムでContextオブジェクトにテーマを設定してみました。それも機能しません。

何か案は?

4

4 に答える 4

9

答えは、テーマを appwidget に動的に適用できないということです。それぞれが特定のテーマを静的に参照する複数のレイアウトを提供し、リモート ビューを作成するときに正しいテーマ/レイアウトを選択する以外に解決策はありません。

于 2010-12-21T17:06:41.170 に答える
3

テーマを appwiget に動的に使用することはできないため、次の簡単な解決策をお勧めします。レイアウト ファイルを切り替えるだけです。

2 つの異なるレイアウトがあるとします。

  • レイアウト1.xml
  • レイアウト2.xml

レイアウトを次のように設定します。

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout1);

そして、必要に応じて、次の方法で 2 番目のものに切り替えます。

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.layout2);

このソリューションは私にとってはうまく機能しています。

于 2012-05-23T20:40:00.430 に答える
-1

setVisibilityバックグラウンドで独自のスタイルを持つレイアウトを非表示にするために使用します。このような:

public static void changeWidgetState(RemoteViews remoteView, int state){
    switch (state){
        case 0:{
            remoteView.setViewVisibility(R.id.widgetLayout1, View.VISIBLE);
            remoteView.setViewVisibility(R.id.widgetLayout2, View.GONE);
        } break;
        case 1:{
            remoteView.setViewVisibility(R.id.widgetLayout1, View.GONE);
            remoteView.setViewVisibility(R.id.widgetLayout2, View.VISIBLE);
        } break;
        ...
        default:
    }

}

xml

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/widgetLayout0"
            android:layout_width="150dip"
            android:layout_height="wrap_content"

            >

        <!--Normal Theme Black Text -->
        <RelativeLayout
                android:id="@+id/widgetLayout1"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                style="@style/WidgetBackgroundNormal"

                />
        <!--Yellow Theme Black Text -->
        <RelativeLayout
                android:id="@+id/widgetLayout2"
                android:layout_height="fill_parent"
                android:layout_width="fill_parent"
                style="@style/WidgetBackgroundYellow"
                />
         ...

        <LinearLayout
            android:orientation="vertical"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:paddingTop="7dip"
            >
            <TextView
                android:id="@+id/widget_server_name"
                style="@style/Text.DefinitionWhite"
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:layout_gravity="left"
                android:layout_marginLeft="10dip"
                    />
            ....
        </LinearLayout>
    </RelativeLayout>
于 2011-02-16T03:22:16.490 に答える