如何为以编程方式存储在变量中的按钮添加 android 可绘制文件的值?
Posted
技术标签:
【中文标题】如何为以编程方式存储在变量中的按钮添加 android 可绘制文件的值?【英文标题】:How to add value for android drawable file for button stored in a varible programatically? 【发布时间】:2021-12-27 14:25:21 【问题描述】:我希望使用下面的方法动态更改按钮的图像,它可以按原样工作。
<Button
android:id="@+id/buttonIdDoesntMatter"
android:layout_
android:layout_
android:text="buttonName"
android:drawableLeft="@drawable/frog"
android:onClick="listener"
android:layout_>
</Button>
以下检索按钮图像的方法适用于我,其中青蛙是图像名称。
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.frog,0);
但我正在尝试根据用户使用共享偏好接受的选项来检索图像。所以我将每个图标名称存储为键值形式的值,并检索用户选择的每个键的值并将它们作为文件名传递给 drawable。
<string-array name="pref_icon_title">
<item>camel</item>
<item>forg</item>
</string-array>
//值对应原始图片名称
</string-array>
<string-array name="pref_icon_values">
<item>camel</item>
<item>forg</item>
<item></item>
</string-array>
在检索用户选择的值并将它们传递给可绘制对象时,它会给出错误并且不知道如何传递.. 我正在使用 String.valueOf(variable),它不起作用
不接受使用 String.valueOf 传递检索到的变量。任何建议将不胜感激。
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.String.valueOf(variable),0);
【问题讨论】:
【参考方案1】:如果我理解得很好,您是在尝试通过名称获取可绘制对象的 id 吗?
您可以使用Resource class 实现此目的,尤其是getIdentifier 函数(它将返回给定资源名称的资源标识符)
用法
public int getIdentifier (String name,
String defType,
String defPackage)
所以在你的情况下,你应该有类似的东西:
int resourceID = getResources().getIdentifier(
variable,
"drawable",
getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
如果您没有参与任何活动,那么您必须传递上下文而不是资源作为参数,然后执行此操作
int resourceID = context.getResources().getIdentifier(
variable,
"drawable",
context.getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
请注意,如果没有找到这样的资源,getIdentifier() 返回 0。 (0 不是有效的资源 ID。)
【讨论】:
感谢兄弟的及时帮助以上是关于如何为以编程方式存储在变量中的按钮添加 android 可绘制文件的值?的主要内容,如果未能解决你的问题,请参考以下文章