You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程通过变量为Android按钮的drawable资源动态赋值?

解决方案

你之前的写法报错是因为 R.drawable 是Android编译阶段自动生成的静态资源类,里面的每一项都是编译期就确定的int常量,不支持运行时直接拼接字符串作为字段名访问。你可以用Android提供的getIdentifier方法,根据资源名称动态获取对应的资源ID,具体实现如下:

完整代码示例

// 1. 从SharedPreference中取出用户选择的图标名称,第二个参数为找不到对应配置时的默认值
String selectedIcon = sharedPreferences.getString("你存储图标配置的key", "frog");

// 2. 动态匹配drawable资源对应的ID
// 参数说明:资源名称、资源类型(此处是drawable)、当前应用包名
int iconResId = getResources().getIdentifier(selectedIcon, "drawable", getPackageName());

// 3. 容错处理:如果没有匹配到对应资源,使用默认图标避免崩溃
if (iconResId == 0) {
    iconResId = R.drawable.frog;
}

// 4. 设置按钮右侧图标
button.setCompoundDrawablesWithIntrinsicBounds(0, 0, iconResId, 0);

注意事项

  • 确保res/drawable目录下的图片资源名称,和你存在pref_icon_values里的取值完全一致,大小写、拼写都不能有偏差(你示例代码里写的forg大概率是frog的拼写错误,需要核对修正)
  • 如果是在Fragment、Adapter等非Activity场景使用,需要用对应的Context实例调用资源方法,比如requireContext().getResources()

内容的提问来源于stack exchange,提问作者tomtom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:24:02