73

我将我的项目相关图像存储在可绘制文件夹中。此外,我将图像名称存储在字符串变量中,并且动态地尝试将这些图像设置为图像视图。但是图像没有显示。请在这方面帮助我。

我的代码:

int res = getResources().getIdentifier(imagename, "drawable", this.getPackageName());
imageview= (ImageView)findViewById(R.id.imageView);
imageview.setImageResource(res);

在上面的代码中,“imagename”是包含图像名称的字符串变量。

提前致谢

4

17 回答 17

132

试试这个:

String uri = "@drawable/myresource";  // where myresource (without the extension) is the file

int imageResource = getResources().getIdentifier(uri, null, getPackageName());

imageview= (ImageView)findViewById(R.id.imageView);
Drawable res = getResources().getDrawable(imageResource);
imageView.setImageDrawable(res);
于 2012-07-31T10:08:47.987 回答
43

在这里,我将frnd_inactive图像设置drawable为图像

 imageview= (ImageView)findViewById(R.id.imageView);
 imageview.setImageDrawable(getResources().getDrawable(R.drawable.frnd_inactive));
于 2012-07-31T10:03:53.447 回答
36
imageview= (ImageView)findViewById(R.id.imageView);
imageview.setImageResource(R.drawable.mydrawable);
于 2012-07-31T10:03:56.540 回答
21

试试这个动态代码

String fnm = "cat"; //  this is image file name
String PACKAGE_NAME = getApplicationContext().getPackageName();
int imgId = getResources().getIdentifier(PACKAGE_NAME+":drawable/"+fnm , null, null);
System.out.println("IMG ID :: "+imgId);
System.out.println("PACKAGE_NAME :: "+PACKAGE_NAME);
//    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),imgId);
your_image_view.setImageBitmap(BitmapFactory.decodeResource(getResources(),imgId));

在上面的代码中,您将需要同时拥有的 Image-file-Name 和 Image-View对象

于 2012-07-31T10:11:03.380 回答
8

请参阅下面的代码,这对我有用

iv.setImageResource(getResources().getIdentifier(
                "imagename", "drawable", "com.package.application"));
于 2012-07-31T10:06:15.270 回答
7

这对我有用(不要使用图像的扩展名,只使用名称):

String imagename = "myImage";
int res = getResources().getIdentifier(imagename, "drawable", this.getPackageName());
imageview= (ImageView)findViewById(R.id.imageView);
imageview.setImageResource(res);
于 2014-06-22T02:59:36.430 回答
6

这是当今适用于每部手机的最佳方式。这些答案中的大多数已被弃用或需要 API >= 19 或 22。您可以使用片段代码或活动代码取决于您的需要。

分段

//setting the bitmap from the drawable folder
Bitmap bitmap= BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.my_image);

//set the image to the imageView
imageView.setImageBitmap(bitmap);

活动

//setting the bitmap from the drawable folder
Bitmap bitmap= BitmapFactory.decodeResource(MyActivity.this.getResources(), R.drawable.my_image);

//set the image to the imageView
imageView.setImageBitmap(bitmap);

干杯!

于 2016-12-14T18:03:50.740 回答
4

像这样设置ImageViewimageView.setImageResource(R.drawable.image)

于 2021-03-29T06:16:26.270 回答
3
imageView.setImageResource(R.drawable.picname);
于 2015-05-06T10:10:28.850 回答
3

getDrawable()已弃用,所以试试这个

imageView.setImageResource(R.drawable.fileName)
于 2016-11-18T12:00:59.507 回答
2

首先让我们的图像名称是myimage。所以你要做的就是去 Drawable 并保存图像名称myimage

现在假设您只知道图像名称并且您需要访问它。使用下面的代码片段来访问它,

您所做的是正确的,请确保您保存了要在编码中使用的图像名称。

public static int getResourceId(Context context, String name, String resourceType) {
    return context.getResources().getIdentifier(toResourceString(name), resourceType, context.getPackageName());
}

private static String toResourceString(String name) {
    return name.replace("(", "")
               .replace(")", "")
               .replace(" ", "_")
               .replace("-", "_")
               .replace("'", "")
               .replace("&", "")
               .toLowerCase();
}

除此之外,您应该确保没有空格和区分大小写

于 2012-07-31T10:25:09.763 回答
2

自 API 22 起,getResources().getDrawable()已弃用(另请参阅Android getResources().getDrawable() 弃用 API 22)。这是一种动态设置图像资源的新方法:

String resourceId = "@drawable/myResourceName"; // where myResourceName is the name of your resource file, minus the file extension
int imageResource = getResources().getIdentifier(resourceId, null, getPackageName());
Drawable drawable = ContextCompat.getDrawable(this, imageResource); // For API 21+, gets a drawable styled for theme of passed Context
imageview = (ImageView) findViewById(R.id.imageView);
imageview.setImageDrawable(drawable);
于 2016-08-28T20:08:49.673 回答
1

getDrawable() 已弃用。 现在你可以使用

imageView.setImageDrawable(ContextCompat.getDrawable(this,R.drawable.msg_status_client_read)) 
于 2016-09-27T06:59:12.207 回答
1

以下是在循环中在Kotlini中执行此操作的方法:

rfsbraz的答案中重用的代码

    val uri = "@drawable/pic_top${i+1}"
    val imageResource = activity.resources.getIdentifier(uri, null, activity.packageName)

    val res = activity.getResources().getDrawable(imageResource)
    holder.view.imgDigit.setImageDrawable(res)
于 2021-03-15T16:08:07.260 回答
0

这对我来说很好。

final R.drawable drawableResources = new R.drawable(); 
final Class<R.drawable> c = R.drawable.class;
final Field[] fields = c.getDeclaredFields();
for (int i=0; i < fields.length;i++) 
{
     resourceId[i] = fields[i].getInt(drawableResources);  
    /* till here you get all the images into the int array resourceId.*/
}
imageview= (ImageView)findViewById(R.id.imageView);
if(your condition)
{
   imageview.setImageResource(resourceId[any]);
}
于 2015-07-27T10:10:39.823 回答
0
int[] phptr=new int[5];

将图像指针添加到数组

for(int lv=0;lv<3;lv++)
    {
        String id="a"+String.valueOf(lv+1);
        phptr[lv]= getResources().getIdentifier(id, "drawable", getPackageName());
    }

for(int loopvariable=0;loopvariable<3;loopvariable++) 
    {
        et[loopvariable] = findViewById(p[loopvariable]);
    }



for(int lv=0;lv<3;lv++)
    {
        et[k].setImageResource(phptr[k]);
    }
于 2018-06-12T06:23:32.963 回答
0
ImageView imageView=findViewById(R.id.imageView)

如果您在可绘制文件夹中有图像,则使用

imageView.setImageResource(R.drawable.imageView)

如果您有 uri 并想在 imageView 中显示它,请使用

imageView.setImageUri("uri")

如果您有位图并想在 imageView 中显示它,请使用

imageView.setImageBitmap(bitmap)

注意:- 1.imageView.setImageDrawable()现在在 java 中已弃用 2. 如果图像 uri 来自 firebase 或任何其他在线链接,则使用

    Picasso.get()
    .load("uri")
    .into(imageView)

https://github.com/square/picasso

或使用

Glide.with(context)
            .load("uri")
            .into(imageView)

( https://github.com/bumptech/glide )

于 2020-08-16T07:15:58.380 回答