4

有一个在RemoteViews类没有setBackground()方法,所以我用以下解决方法:动态变化AppWidget的背景与9补丁绘制

  1. 创建一个FrameLayout我的应用程序插件与ImageView为背景视图。
  2. 使用setImageViewResource()方法更改了ImageView图像。

不幸的是,对于9修补程序可绘制,此方法不起作用。同样当ImageViewandroid:src属性指向9修补程序 - 它也不起作用。有没有办法用9-补丁drawable以编程方式更改AppWidget的背景图像?提前致谢。

编辑 设置9补丁作为XML初始背景:

<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"它不能正常伸展的形象,这个代码工作正常。和代码以从AppWidgetProvideronUpdate方法改变背景:

views.setImageViewResource(R.id.small_widget_layout_bg, 
        R.drawable.backgroung_lime); 

这并不拉伸图像为一个9补丁。

+0

你的意思是'它不起作用'? – 2012-02-27 10:45:43

+0

@ReubenScratton,9贴片没有正确拉伸,它只是居中,像一个简单的PNG可绘制拉伸。 – Egor 2012-02-27 10:50:08

+0

你确定你的9补丁是有效的吗?即在正常的过程中正确绘制。我敢肯定,我已经做到了这一点,没有问题之前... – 2012-02-27 10:52:10

回答

5

这个答案被诊断为上述评论...

RemoteView不允许访问View.setBackground(),让您使用的解决方法ImageViewandroid:src属性很好,只要the android:scaleType属性设置为fitXY

ImageView不会伸展它的前景图像,除非你告诉它。

3

请忽略如果u发现这个微不足道的或不相关的,但不能尝试(假设你正在处理部件):

  • 声明不同的布局(xml)为您widget
  • 更改remoteView'的源代码(layout.id),而不是尝试更改所选布局。

AFAIK,这是解决这类问题的最常用的方法。这是不完美的两个简单的事情,我会注意自己:

  • 如果你在你的widget有n个不同的“状态” /“观点”你是干什么的?

但只要你的9补丁文件也静态资源,ñ是痛苦的,但理论上仍可控。

  • 很难跟踪这些并行文件中的更改。

我也很想找到这一个简单的方法...

这种方法可能不是一个选项,你还因为它基本上是艰辛的道路。但它仍是一个选择。


建议#2

您是否尝试过使用方法?

public void setInt (int viewId, String methodName, int value)

remoteView.setInt(R.id.viewid, "setBackgroundResource", R.drawable.backgroung_lime); 

从另一个问题:Change remoteView ImageView background

+0

此问题涉及[App Widgets](http://developer.android.com/guide/topics/appwidgets/index.html);主屏幕'插件'。 'remoteViews'不是OP自己的类。 – 2012-02-27 11:36:17

+0

是的,我猜。我是否让它听起来像是一个自定义课程?因为它不是这个意图。我将编辑。 – 2012-02-27 11:40:20

+0

@Zortkun你值得+1投你的建议#2。它解决了我的问题就像一个魅力:) – Prativa 2012-12-18 07:32:47