Android如何将xml形状设置为小部件背景?

时间:2012-05-16 15:48:11

标签: android widget

如何将xml中定义的形状设置为窗口小部件中图像的背景? 以下是我的尝试:

RemoteViews views = new RemoteViews(c.getPackageName(), R.layout.widget_layout);

Drawable dr = getResources().getDrawable(R.drawable.widgetshape);  //class cast exception
Bitmap bp = ((BitmapDrawable)dr).getBitmap();
views.setImageViewBitmap(R.id.ImageView01, bp);

这会导致android.graphics.drawable.GradientDrawable类强制转换异常。

Bitmap icon = BitmapFactory.decodeResource(WidgetConfig.this.getResources(),  R.drawable.widgetshape);
views.setImageViewBitmap(R.id.ImageView01, icon);

这会在awm.updateAppWidget(awID, views);行上抛出NullPointerException错误。

Bitmap bp = ((BitmapDrawable)this.getResources().getDrawable(R.drawable.widgetshape)).getBitmap(); //Class Cast Exception
views.setImageViewBitmap(R.id.ImageView01, bp);

这会在第一行产生android.graphics.drawable.GradientDrawable类转换异常。

1 个答案:

答案 0 :(得分:1)

您可以使用setInt实例调用RemoteViews方法来执行此操作:

views.setInt(R.id.layout, "setBackgroundResource", R.drawable.widgetshape);

要实现此目的,您必须在小部件布局的@id(可能是根视图)上将"layout"属性设置为 View (在xml)。

您还可以从xml定义该视图的背景,例如:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layout" android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/widgetshape">