【发布时间】:2012-01-28 09:26:45
【问题描述】:
我正在从数据库中动态生成一个字符串,该字符串在drawable 文件夹中具有相同的图像名称。
现在我想动态使用setImageDrawable(R.id.StringGenerated) 为ImageView 设置该值。
任何建议..
【问题讨论】:
-
意思是动态生成图片的ID,对吧?
我正在从数据库中动态生成一个字符串,该字符串在drawable 文件夹中具有相同的图像名称。
现在我想动态使用setImageDrawable(R.id.StringGenerated) 为ImageView 设置该值。
任何建议..
【问题讨论】:
试试这个,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
这将返回您要访问的可绘制对象的 id... 然后您可以通过执行以下操作在 imageview 中设置图像
imageview.setImageResource(id);
【讨论】:
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
ImageView imgView = new ImageView(context);
imgView = (ImageView)findViewById(R.id.image1);
imgView.setImageDrawable(image);
或
setImageDrawable(getResources().getDrawable(R.drawable.icon));
【讨论】:
我个人更喜欢这样使用setImageResource()的方法。
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
【讨论】:
资源可绘制名称不存储为字符串,因此您必须将字符串解析为构建期间生成的整数常量。您可以使用Resources 类将字符串解析为该整数。
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
这会将您生成的字符串解析为整数,ImageView 可以使用它来加载正确的图像。
或者,您可以使用 id 手动加载 Drawable,然后使用该可绘制对象而不是资源 ID 设置图像。
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
【讨论】:
就像这个答案一样简单:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
【讨论】:
您可以尝试使用此代码:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
【讨论】:
今天发布的所有答案均不适用。例如,不推荐使用 getDrawable()。这是一个更新的答案,干杯!
ContextCompat.getDrawable(mContext, drawable)
来自记录的方法
public static final android.graphics.drawable.Drawable getDrawable(@NotNull android.content.Context 上下文,
@android.support.annotation.DrawableRes int id
【讨论】:
至少在 Android API 15 中有效
ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);
您可以使用 setImageResource(),但文档指定 “在 UI 线程上进行位图读取和解码,这可能导致延迟打嗝……考虑使用 setImageDrawable() 或 setImageBitmap()。” 如 chetto 所述
【讨论】:
imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));
【讨论】:
如果你不能在一个非 Activity 的类中获取这样的资源对象,你必须为 getResources() 添加 getContext() 方法
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
【讨论】:
你也可以使用类似的东西:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
或使用毕加索:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
【讨论】:
从 API 22 使用:
Drawable myDrawable = ResourcesCompat.getDrawable(getResources(),
R.drawable.dos_red, null);
【讨论】:
我遇到了和你一样的问题,我做了以下解决方法:
**IMAGEVIEW**.setImageResource(getActivity()
.getResources()
.getIdentifier("**IMG**", "drawable", getActivity()
.getPackageName()));
【讨论】:
构造一个 POJO.java 类并创建“构造函数、getter 和 setter 方法”
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
然后通过图像可绘制资源设置适配器到 CustomAdapter.java
class CustomAdapter extends ArrayAdapter<POJO>{
private ArrayList<POJO> cartList = new ArrayList<POJO>();
public MyCartAdapter(Context context, int resource) {
super(context, resource);
}
public MyCartAdapter(Context context, ArrayList<POJO> cartList) {
super(context, 0, cartList);
this.context = context;
this.cartList = cartList;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
/*
*Here you can setup your layout and references.
**/
ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image);
productImage.setImageDrawable(POJO.getProductImagePath());
}
}
然后通过ActivityClass.java传递引用
public class MyCartActivity extends AppCompatActivity{
POJO pojo;
CustomAdapter customAdapter;
ArrayList<POJO> cartList = new ArrayList<POJO>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
customAdapter = new CustomAdapter(this, cartList);
pojo = new POJO(getResources().getDrawable(R.drawable.help_green));
}
}
【讨论】:
我的一个项目,一切正常! )
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final ModelSystemTraining modelSystemTraining = items.get(position);
int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName());
final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder;
final View itemView = fragmentViewHolderSystem.itemView;
// Set Icon
fragmentViewHolderSystem.trainingIconImage.setImageResource(icon);
// Set Title
fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle());
// Set Desc
fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription());
【讨论】:
btnImg.SetImageDrawable(GetDrawable(Resource.Drawable.button_round_green));
API 23 Android 6.0
【讨论】:
在应用运行时无法生成“R”文件。您可以使用其他一些替代方法,例如使用 if-else 或 switch-case
【讨论】:
R