将主题应用于appwidget

时间:2010-10-23 17:34:34

标签: android android-widget android-styles

我正在尝试为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对象上设置主题。这也不起作用。

任何想法? 感谢。

5 个答案:

答案 0 :(得分:6)

答案是您无法动态地将主题应用于appwidget。除了提供每个静态引用特定主题的多个布局,然后在构建远程视图时选择正确的主题/布局,没有其他解决方案。

答案 1 :(得分:1)

由于我们不能动态地将主题用于appwidget,我建议下一个简单的解决方案 - 只需在布局文件之间切换:

假设我们有两种不同的布局:

  • layout1.xml
  • layout2.xml

我们将布局设置如下:

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

当我们需要时,我们将其切换到第二个:

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

这个解决方案对我来说很好。

答案 2 :(得分:1)

在相关布局中使用style="@android:style/ Widget.(THEME).(CONTROLTYPE) ",例如按钮上的 Holo

<Button
    android:id="@+id/button1"
    style="@android:style/Widget.Holo.Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

上面的style=会设置一个按钮,该按钮等同于清单中的android:theme="android: Theme.Holo "设置对该按钮的设置,这是一项活动。

答案 3 :(得分:0)

使用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>

答案 4 :(得分:-3)