我有一个带小部件的应用程序。我创建了一些首选项,让用户更改我的小部件的背景。为此,我将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中的背景图像会变小?
你有什么建议?
答案 0 :(得分:1)
答案1:可以使用“android:background”设置LinearLayout的背景 详见 - http://developer.android.com/reference/android/view/View.html#attr_android:background
尝试设置ImageView的“android:src”而不是“android:background”。