我有以下xml资源代码,它是卡片项列表的背景布局
android:drawable="@drawable/kpop"
我的问题是我想以编程方式更改可绘制资源
<input type="hidden" text="foo" name="<?=htmlspecialchars($_POST['foo'])?>">
(以便每张卡片的背景图片都不同)
任何想法/提示我怎么能这样做?
答案 0 :(得分:3)
以下是如何实现这一目标:
获取对图层列表的引用
LayerDrawable layer = (LayerDrawable)yourView.getBackground();
或的
LayerDrawable layer = (LayerDrawable)context.getResources().getDrawable(R.id.yourLayerDrawable);
在内部创建图层drawable的新实例
layer.Mutate();
Android内部缓存drawables,这意味着如果通过上述方法修改drawable获取,则所有其他drawable将受到影响。为防止这种情况发生,您可以致电Drawable.Mutate()告诉系统保留一份单独的drawable副本,以免影响其他drawable。
设置要修改的项目的ID
android:id="@+id/image_background"
像这样:
<item
android:left="0dp"
android:right="0dp"
android:top="0dp"
android:bottom="2dp"
android:id="@+id/image_background" <----
android:drawable="@drawable/kpop">
<shape android:shape="rectangle">
<solid android:color="#151B54"/>
<corners android:radius="2dp" />
</shape>
</item>
设置/重置该项目的drawable
layer.setDrawableByLayerId(R.id.image_background, yourNewDrawable);
重绘图层
layer.invalidateSelf();
答案 1 :(得分:1)
您没有发布您的java代码..我认为它可以帮助您。 尝试在您自己的逻辑中使用此代码。
yourCard.setBackgroundDrawable( getResources().getDrawable(R.drawable.kpop) );
或
yourCard.setBackground(R.drawable.kpop);
代码没有经过测试,但我认为它会起作用..评论请提出任何问题。