如何编程通过变量为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
相关产品推荐
相关产品推荐

