美文网首页
Android根据Drawable中的文件名称获取文件

Android根据Drawable中的文件名称获取文件

作者: 王魔王 | 来源:发表于2019-10-10 10:43 被阅读0次

今天遇到一个奇怪的需求,根据文件名称来设置本地图片
详细解释一下就是:提前把N张图片放到 本地的drawable目录中,然后根据服务器返回的文件名称来展示对应的图片

思路分析:Android中获取到各种图片资源也好,文字资源也罢,我们常见的findViewById操作也一样,最终都是通过资源(控件)的Id来找到对应的对象的,如果我们能通过图片名称获取到图片的id,那么我的需求即可实现

然后,我打开了万能的百度
经过抄袭和验证,下面两个方法均可使用

方法一

 /**
     * 获取图片名称获取图片的资源id的方法
     *
     * @param imageName  图片的名称,注意不用加图片的后缀
     * @return 返回图片资源的id
     */
    public int getResourceId(String imageName) {
        Context ctx = getBaseContext();
        int resId = getResources().getIdentifier(imageName, "drawable", ctx.getPackageName());
        return resId;
    }

方法二

 /**
     * 获取图片名称获取图片的资源id的方法
     *
     * @param imageName  图片的名称,注意不用加图片的后缀
     * @return 返回图片资源的id
     */
    public int getResourceId(String imageName) {
        Field field = null;
        try {
             field = R.drawable.class.getDeclaredField(imageName);
            int resId = field.getInt(field.getName());
            return resId;

        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return -1;
    }

拿到了图片的id之后,那么我们就可以根据id拿到这个图片,拿到了图片我们就能把这种图片设置给我们的imageView了

示例代码

      //获取图片控件
       ImageView ivTest= findViewById(R.id.ivTest);
       //  获取ic_launcher.png的id
        int resource = getResourceId("ic_launcher");
      //  根据图片的id获取到这张图片
        Drawable drawable = getResources().getDrawable(resource);
      // 把图片设置给imageView
        ivTest.setImageDrawable(drawable);

相关文章

网友评论

      本文标题:Android根据Drawable中的文件名称获取文件

      本文链接:https://www.haomeiwen.com/subject/mknwpctx.html