如何以编程方式为存储在变量中的按钮添加 android 可绘制文件的值?
How to add value for android drawable file for button stored in a varible programatically?
我希望使用以下方法动态更改按钮右侧的图像,它按原样工作。
<Button
android:id="@+id/buttonIdDoesntMatter"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="buttonName"
android:drawableLeft="@drawable/frog"
android:onClick="listener"
android:layout_width="fill_parent">
</Button>
以下检索按钮图像的方法对我有用,其中 frog 是图像名称。
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(变量),它不起作用
不接受使用 String.valueOf 传递检索到的变量。任何建议将不胜感激。
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.String.valueOf(variable),0);
如果我没理解错的话,你是想通过名称获取可绘制对象的 ID 吗?
您可以使用 Resource class 实现此目的,尤其是 getIdentifier 函数(它将 return 给定资源名称的资源标识符)
用法
public int getIdentifier (String name,
String defType,
String defPackage)
所以在你的情况下,你应该有类似的东西:
int resourceID = getResources().getIdentifier(
variable,
"drawable",
getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
如果您不在任何 activity 中,那么您必须传递上下文而不是资源作为参数,然后执行此操作
int resourceID = context.getResources().getIdentifier(
variable,
"drawable",
context.getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
注意 getIdentifier() Returns 0 如果没有找到这样的资源。 (0 不是有效的资源 ID。)
我希望使用以下方法动态更改按钮右侧的图像,它按原样工作。
<Button
android:id="@+id/buttonIdDoesntMatter"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="buttonName"
android:drawableLeft="@drawable/frog"
android:onClick="listener"
android:layout_width="fill_parent">
</Button>
以下检索按钮图像的方法对我有用,其中 frog 是图像名称。
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(变量),它不起作用
不接受使用 String.valueOf 传递检索到的变量。任何建议将不胜感激。
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, R.drawable.String.valueOf(variable),0);
如果我没理解错的话,你是想通过名称获取可绘制对象的 ID 吗?
您可以使用 Resource class 实现此目的,尤其是 getIdentifier 函数(它将 return 给定资源名称的资源标识符)
用法
public int getIdentifier (String name,
String defType,
String defPackage)
所以在你的情况下,你应该有类似的东西:
int resourceID = getResources().getIdentifier(
variable,
"drawable",
getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
如果您不在任何 activity 中,那么您必须传递上下文而不是资源作为参数,然后执行此操作
int resourceID = context.getResources().getIdentifier(
variable,
"drawable",
context.getPackageName()
);
button.setCompoundDrawablesWithIntrinsicBounds( 0, 0, resourceID, 0);
注意 getIdentifier() Returns 0 如果没有找到这样的资源。 (0 不是有效的资源 ID。)