Android列表首选项和小部件背景

时间:2011-02-06 10:58:13

标签: android android-preferences

我创建了一个小部件(HelloWidget.java),它的一个活动(MainActivity.java)和一个listpreference(EditPreferences.java)。

XML文件:

  • Main.xml:这有小部件
  • Config.xml:它有活动:按钮
  • preferences.xml:这有listpreference

我创建了首选项,让用户更改窗口小部件的背景图像。我在drawable-hdpi文件夹中有4个图像文件。默认背景设置如android:background =“@ drawable / goldgreenbg”

在MainActivity.java中,我有这个代码来设置背景图像,如果用户点击列表首选项的第一个或第二个元素:

preferences = PreferenceManager.getDefaultSharedPreferences(this);
  String listpref = preferences.getString("listPref", "n/a");              

  if (listpref.equals("color1"))
  {
      Toast.makeText(MainActivity.this, "Black" + listpref, Toast.LENGTH_LONG).show();
      setContentView(R.layout.main);
      LinearLayout ll = (LinearLayout) findViewById(R.id.widgetlayout);
      ll.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackbg));
  }
  else if (listpref.equals("color2"))
  {
      Toast.makeText(MainActivity.this, "Brown" + listpref, Toast.LENGTH_LONG).show();
      setContentView(R.layout.main);
      LinearLayout ll = (LinearLayout) findViewById(R.id.widgetlayout);
      ll.setBackgroundDrawable(getResources().getDrawable(R.drawable.brownbg));
  }

不幸的是,这会导致更改活动,而不是小部件。所以现在我看到背景图像而不是活动中的按钮,而小部件没有变化。 我试图将它放在UpdateService.java的onCreate()方法中,但它不允许使用setContentView()。 有什么想法吗?

更新: main.xml中:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/goldgreenbg"
    android:id="@+id/widgetlayout">
<TextView android:id="@+id/widget_textview"
    android:text="@string/widget_text"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center_horizontal|center"
    android:gravity="center_horizontal"
    android:layout_marginTop="0dip"
    android:padding="0dip"
    android:textColor="#0B3B0B"
    android:textSize="11sp"/>

<TextView android:id="@+id/widget_textview2"
    android:text="@string/widget_text"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center_horizontal|center"
    android:gravity="center_horizontal"
    android:layout_marginTop="0dip"
    android:padding="0dip"
    android:textSize="12sp"
    android:textColor="@android:color/white"/>
<TextView android:id="@+id/widget_textview3"
    android:text="@string/widget_text"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center_horizontal|center"
    android:layout_marginTop="0dip"
    android:padding="0dip"
    android:textSize="9sp"
    android:textColor="#0B3B0B"/>
</LinearLayout>

解决: “If”部分应位于preferences.java文件中,并且使用此代码进行线性布局:

 RemoteViews updateViews = new RemoteViews(EditPreferences.this.getPackageName(), R.layout.main);
              updateViews.setTextColor(R.id.widget_textview, Color.rgb(215, 215, 215));
              updateViews.setTextColor(R.id.widget_textview2, Color.WHITE);
              updateViews.setTextColor(R.id.widget_textview3, Color.rgb(155, 155, 155));
              updateViews.setImageViewBitmap(R.id.ImageView01, ((BitmapDrawable)EditPreferences.this.getResources().getDrawable(R.drawable.blackbg)).getBitmap());
              ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class);
              AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this);
              manager.updateAppWidget(thisWidget, updateViews);

1 个答案:

答案 0 :(得分:0)

你的问题就在这里:

LinearLayout ll = (LinearLayout) findViewById(R.id.widgetlayout);
ll.setBackgroundDrawable(getResources().getDrawable(R.drawable.blackbg));

您设置整个布局(或至少在LinearLayout内部设置)。你应该使用小部件。