RemoteViews
类中没有setBackground()
方法,因此我使用了以下解决方法:
- 为我的应用小部件创建了一个
FrameLayout
,并将ImageView
作为背景 View 。 - 使用
setImageViewResource()
方法更改了ImageView
图像。
不幸的是,对于 9-patch 可绘制对象,此方法不起作用。此外,当 ImageView
的 android:src
属性指向 9-patch - 它也不起作用。有什么方法可以使用 9-patch drawable 以编程方式更改 AppWidget
的背景图像吗?提前致谢。
编辑 在 XML 中将 9-patch 设置为初始背景:
<ImageView
android:id="@+id/small_widget_layout_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_lime" />
当我使用 android:src="@drawable/background_lime"
时,它没有正确拉伸(stretch)图像,这段代码工作正常。以及从 AppWidgetProvider
onUpdate
方法更改背景的代码:
views.setImageViewResource(R.id.small_widget_layout_bg,
R.drawable.backgroung_lime);
这不会将图像拉伸(stretch)为 9 补丁。
最佳答案
这个答案在上面的评论中诊断出来了...
RemoteView
不允许访问 View.setBackground()
,因此使用 android:src
属性的解决方法 ImageView
很好,前提是 android:scaleType
属性设置为 fitXY。
ImageView
不会拉伸(stretch)它的前景图像,除非你告诉它。
关于android - 使用 9 patch drawable 动态更改 AppWidget 的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392269/