【问题标题】:Android widget backgroundAndroid 小部件背景
【发布时间】:2011-02-12 09:54:50
【问题描述】:

我有一个带有小部件的应用程序。我创建了一些首选项来让用户更改我的小部件的背景。为此,我将 4 个 .png 文件导入到 drawable-hdpi 文件夹中。 如果我在我的 xml 中使用 LinearLayout,我无法更改背景:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="146dip"
    android:layout_height="72dip"
    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="#FFFFFF"/>
<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>

在 EditPreferences.java 我这样设置背景:

final Preference listpref = getPreferenceScreen().findPreference("listPref");
        listpref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() 
        {
         public boolean onPreferenceChange(Preference p, Object newValue) 
         {
          String color = (String) newValue;

          if (color.equals("color1"))
          {
              Toast.makeText(EditPreferences.this, "Black", Toast.LENGTH_SHORT);
              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.setImageViewResource(R.id.ImageView01, R.drawable.blackbg);
              ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class);
              AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this);
              manager.updateAppWidget(thisWidget, updateViews);
          }
          else if (color.equals("color2"))
          {
              Toast.makeText(EditPreferences.this, "Brown", Toast.LENGTH_SHORT);
              RemoteViews updateViews = new RemoteViews(EditPreferences.this.getPackageName(), R.layout.main);
              updateViews.setTextColor(R.id.widget_textview, Color.rgb(23, 81, 11));
              updateViews.setTextColor(R.id.widget_textview2, Color.WHITE);
              updateViews.setTextColor(R.id.widget_textview3, Color.rgb(23, 81, 11));
        //    updateViews.setImageViewResource(R.id.ImageView01, R.drawable.brownbg);           
              ComponentName thisWidget = new ComponentName(EditPreferences.this, HelloWidget.class);
              AppWidgetManager manager = AppWidgetManager.getInstance(EditPreferences.this);
              manager.updateAppWidget(thisWidget, updateViews);
          }
  return true;
         }
        });

如您所见,我在 xml 文件中使用了 ImageView,如下所示:

<ImageView android:id="@+id/ImageView01"
     android:layout_width="86dip" 
     android:layout_height="72dip"
     android:background="@drawable/pinkwhitebg">
 </ImageView>

但除非我使用RelativeLayout,否则我无法对齐它以覆盖整个布局。或者我可以吗?

如果我在 ImageView 中使用 RelativeLayout,则 imageview 比图像小!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="146dip"
    android:layout_height="72dip"
    android:layout_gravity="center"
    android:id="@+id/widgetlayout">
<ImageView android:id="@+id/ImageView01"
     android:layout_width="146dip" 
     android:layout_height="72dip"
     android:layout_marginLeft="3dip"
     android:layout_marginRight="30dip">
 </ImageView>
<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:layout_marginLeft="40dip"
    android:paddingLeft="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:layout_marginLeft="0dip"
    android:paddingLeft="30dip"
    android:textSize="12sp"
    android:textColor="#E8E86B"
    android:layout_below="@+id/widget_textview"/>
<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:layout_marginLeft="0dip"
    android:paddingLeft="30dip"
    android:textSize="9sp"
    android:textColor="#0B3B0B"
    android:layout_below="@+id/widget_textview2"/>
</RelativeLayout>

所以这很奇怪,因为我在这里使用与线性布局相同的宽度和高度,但背景更薄..

我也尝试过这种非常简单的方法,但这种方式代替了小部件,我只得到文本“问题加载小部件”:

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

问题 1:我可以在不使用 ImageView 的情况下更改小部件的背景吗?如何? (这将是最好的解决方案)

问题2:我可以用ImageView覆盖整个LinearLayout吗?

问题3:为什么在RelativeLayout的情况下ImageView的背景图变小了?

你有什么建议?

【问题讨论】:

    标签: android android-widget


    【解决方案1】:

    Ans 1:LinearLayout 的背景可以使用“android:background”设置 详情见-http://developer.android.com/reference/android/view/View.html#attr_android:background

    尝试设置ImageView的“android:src”而不是“android:background”。

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多