TextView无法显示Drawable文件夹里面的图片

BugScanner 发布于 2015/09/24 14:39
阅读 425
收藏 0

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

主要代码如下:

s3 = "Girl1: <img src='one.jpeg'><br />";
        s3 += "Girl2: <img src = 'two.jpeg'><br />";
        s3 += "Girl3:<img src = 'three.jpeg'><br />";

        Spanned spanned1 = Html.fromHtml(s3, new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String src) {
                Drawable drawable = null;
              try {
                  Field field = R.drawable.class.getField(src);
                  Log.d("MainActivity", field.toString());
                  int resourceId = Integer.parseInt(field.get(null).toString());

                  drawable = getResources().getDrawable(resourceId);
                   drawable.setBounds(0,0,drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
                } catch (IllegalAccessException e) {
                     e.printStackTrace();
                } catch (NoSuchFieldException e) {
                  e.printStackTrace();
                }

                return drawable;
            }
        }, null);

        tv3.setText(spanned1);
        tv3.setMovementMethod(LinkMovementMethod.getInstance());

结果:

加载中
0
吞鱼小王子
吞鱼小王子
骚年 这样写,反射的话没有文件后缀,你看下R.java
int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName());
吞鱼小王子
吞鱼小王子
回复 @BugTermina : 这个原来是ball_red.jpg 去掉后缀就这样了 你的是one.jpg 资源名称填one就对了,不需要反射
BugScanner
BugScanner
回复 @兔小懒 : 刚转android不到一个月。。出来了,非常感谢!!!!
吞鱼小王子
吞鱼小王子
回复 @BugTermina : 第一个参数是资源名称,没后缀,第二个是资源类型,骚年,要学会看文档,研究源码
BugScanner
BugScanner
getIdentifier这个方法里面第一个参数有什么用?
0
BugScanner
BugScanner

引用来自“兔小懒”的评论

骚年 这样写,反射的话没有文件后缀,你看下R.java
int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName());
回复 @兔小懒 : 我改了下代码,想通过发射动态获取getIdentifier的第一个参数,也就是资源名称,但是一直报异常,代码如下:
Field field = R.drawable.class.getField(src);
String filename = field.getName();
int resourceId = getResources().getIdentifier(filename, "drawable", getPackageName());





0
吞鱼小王子
吞鱼小王子

引用来自“兔小懒”的评论

骚年 这样写,反射的话没有文件后缀,你看下R.java
int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName());

引用来自“BugTermina”的评论

回复 @兔小懒 : 我改了下代码,想通过发射动态获取getIdentifier的第一个参数,也就是资源名称,但是一直报异常,代码如下:
Field field = R.drawable.class.getField(src);
String filename = field.getName();
int resourceId = getResources().getIdentifier(filename, "drawable", getPackageName());





//Field field = R.drawable.class.getField(src);
String resName =src.replaceAll(".jpg","");
int resourceId = getResources().getIdentifier(resName, "drawable", getPackageName());
第一个参数是资源名称,没有后缀,你拿的文件是有拓展名的,直接用文件名就行了,去掉拓展名,不需要反射
返回顶部
顶部