【问题标题】:How can I get image name?如何获取图像名称?
【发布时间】:2016-02-06 06:08:27
【问题描述】:

我有一个 Button 和 imageView,当我单击按钮时,imageview 中似乎有 1 个随机图像。然后它的名字就会出现在 textView...

        ImageView img=(ImageView)findViewById(R.id.logolar);
        Random rand = new Random();
        int rndInt = rand.nextInt(5) + 1;
        String drawableName = "image"+ rndInt;
        int resID = getResources().getIdentifier(drawableName, "drawable", getPackageName());
        img.setImageResource(resID);

        TextView logoismi = (TextView)findViewById(R.id.logoismi);
        logoismi.setText(lastImageName);
        clickeddata.add(logoismi.getText().toString());

        lastImageName = drawableName;

但是使用此代码,我的图像名称必须是; image1 , image2 , image3 ......我不想要它。我的图像有不同的名称。所以我可以用这段代码得到不同的图像名称;

    final Class drawableClass = R.drawable.class;
final Field[] fields = drawableClass.getFields();

final Random rand = new Random();
int rndInt = rand.nextInt(fields.length);
try {
    int resID = fields[rndInt].getInt(drawableClass);
    img.setImageResource(resID);
} catch (Exception e) {
    e.printStackTrace();
}

但我也无法使用此代码在我的 textView 中获取图像名称。我该如何解决所有这些问题?

【问题讨论】:

    标签: android


    【解决方案1】:

    使用这个

    getResources().getResourceEntryName(int resid);
    

    getResources().getResourceName(int resid);
    

    你的代码应该是

    try {
        int resID = fields[rndInt].getInt(drawableClass);
        img.setImageResource(resID);
        String lastImageName = getResources().getResourceEntryName(resID);
        //String lastImageName = getResources().getResourceName(resID); // You can use this too
        TextView logoismi = (TextView)findViewById(R.id.logoismi);
        logoismi.setText(lastImageName);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    更新

    创建一个图像 id 的数组

    XML 文件保存在res/values/arrays.xml

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="my_array">
            <item>@drawable/rose</item>
            <item>@drawable/book</item>
            <item>@drawable/pen</item>
        </array>
    </resources>
    

    这样读

    TypedArray ar = context.getResources().obtainTypedArray(R.array.my_array);
    int len = ar.length();
    int[] resIds = new int[len];
    for (int i = 0; i < len; i++)
        resIds[i] = ar.getResourceId(i, 0);
    ar.recycle();
    

    像这样在你的代码中使用它

    Random rand = new Random();
    int rndInt = rand.nextInt(resIds.length) + 1;
    try {
        int resID = resIds[rndInt];
        img.setImageResource(resID);
        String lastImageName = getResources().getResourceEntryName(resID);
        //String lastImageName = getResources().getResourceName(resID); // You can use this too
        TextView logoismi = (TextView)findViewById(R.id.logoismi);
        logoismi.setText(lastImageName);
    } catch (Exception e) {
        e.printStackTrace();
    }
    

    【讨论】:

    • 但是图片没有变化?也许是进口焊接的错误? i.hizliresim.com/gZ1ajN.png
    • 是的,我处理它,但它正在获取所有可绘制数据。 :D 我可以创建一个可绘制文件夹并使用它吗?
    • @Eren:我想这是不可能的。看到这个stackoverflow.com/questions/1077357/…我想你的第一种方法在这种情况下更好。
    • 但是我无法在 textView 中显示图像名称 有 image1、image2、image3 没有任何建议。你有什么想法吗??
    • 我能想到一件事。创建一个图像 id 数组并使用随机索引获取它。休息保持不变。
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 2017-04-15
    相关资源
    最近更新 更多