使用9补丁drawable动态更改AppWidget的背景

Ego*_*gor 4 android background-image drawable nine-patch android-appwidget

类中没有setBackground()方法RemoteViews,所以我使用了以下解决方法:

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

不幸的是,当涉及9-patch drawables时,这种方法不起作用.当一个ImageView's android:src属性指向9-patch时 - 它也不起作用.有没有办法AppWidget用9-patch drawable以编程方式改变背景图像?提前致谢.

编辑 将9-patch设置为XML中的初始背景:

<ImageView
    android:id="@+id/small_widget_layout_bg"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background_lime" />
Run Code Online (Sandbox Code Playgroud)

当我使用android:src="@drawable/background_lime"它不能正确拉伸图像,这段代码工作正常.以及从AppWidgetProvider onUpdate方法更改背景的代码:

views.setImageViewResource(R.id.small_widget_layout_bg,
                    R.drawable.backgroung_lime);
Run Code Online (Sandbox Code Playgroud)

这不会将图像拉伸为9补丁.

Reu*_*ton 5

这个答案在上述评论中被诊断出来......

RemoteView不允许访问View.setBackground(),因此使用a android:src属性的解决方法ImageView是好的,前提the android:scaleType是该属性设置为fitXY.

ImageView 除非你告诉它,否则不会拉伸它的前景图像.