setBackground()
类中没有RemoteViews
方法,所以我使用了以下解决方法:
FrameLayout
,并以ImageView
作为背景视图。ImageView
方法更改了setImageViewResource()
图片。不幸的是,当谈到9-patch drawables时,这种方法不起作用。此外,当ImageView
的{{1}}属性指向9补丁时,它也不起作用。有没有办法用9-patch drawable以编程方式更改android:src
的背景图像?提前谢谢。
修改 将9-patch设置为XML中的初始背景:
AppWidget
当我使用<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"
AppWidgetProvider
方法更改背景的代码:
onUpdate
这不会将图像拉伸为9补丁。
答案 0 :(得分:5)
这个答案在上述评论中被诊断出来......
RemoteView
不允许访问View.setBackground()
,因此使用android:src
的{{1}}属性的解决方法很好,提供ImageView
属性设置为 fitXY 。
the android:scaleType
不会拉伸它的前景图像。
答案 1 :(得分:4)
如果您发现这个微不足道或无关紧要,请忽略,但是您可以尝试(假设您正在处理小部件):
xml
声明不同的布局(widget
)。remoteView'
的来源(layout.id
),而不是尝试对所选布局进行更改。AFAIK ,这是解决此类问题的最常用方法。对于我自己可以注意到的两件简单的事情,这不是完美的:
但是只要你的9补丁文件也是静态资源, n 很痛苦,但理论上仍然可以管理。
我也很想为这个找到一个简单的方法......
这种方法对你来说也许不是一个选择,因为它基本上是艰难的方式。但它仍然是一个选择。
建议#2
您是否尝试过使用该方法?
public void setInt (int viewId, String methodName, int value)
remoteView.setInt(R.id.viewid, "setBackgroundResource", R.drawable.backgroung_lime);