如何为以编程方式存储在变量中的按钮添加 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 可绘制文件的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何为栏按钮添加徽章?

在对话窗口中使用 Glade,如何为按钮添加响应

以编程方式向表格视图单元格添加按钮[关闭]

以编程方式将按钮添加到表格视图单元格[关闭]

你如何为自己做一个segue?

如何为前置摄像头添加开关按钮?