android TextView 显示图片,类似于聊天窗口。

需求:解析从获得的字符串,提取出定好的伪标签,换成图片显示到TextView中。

  核心方法  android.text.Html.fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)

  api 翻译:从提供的HTML字符串返回可显示的样式文本。HTML中的任何< img >标记将使用指定的ImageGetter请求表示图像的(如果你不希望这个使用null)和指定的TagHandler处理未知的标签(如果你不希望这个指定null)。

MainActivity:

 1 private TextView textView;
 2     @Override
 3     protected void onCreate(Bundle savedInstanceState)
 4     {
 5         super.onCreate(savedInstanceState);
 6         setContentView(R.layout.main);
 7         textView = (TextView) findViewById(R.id.textView);
 8         
 9         String str ="i[em_6]dsadsadglei,frodamdsadasdhenan,toshangdsahai[em_5],taijidsadangleihereisinshanghai[em_1]dhsajkdhsjkajkcbajkd[em_9]";
10         
11         str = RegexUtil.geTtextOfHtml(str);
12         Log.d(str, str);
13         CharSequence html = Html.fromHtml(str,new ImageGetter()
14         {
15             @Override
16             public Drawable getDrawable(String source)
17             {
18                 //获得系统资源(图片)
19                 Drawable drawable = getResources().getDrawable(getResourceId(source));
20                 
21                 drawable.setBounds(0,0,drawable.getIntrinsicHeight(),drawable.getIntrinsicHeight());
22                 //这里还可以对资源做进一步的处理
23                 return drawable;
24             }
25         }, null);
26         
27         textView.setText(html);
28         
29     }
30     
31     public int getResourceId(String name)
32     {
33         try
34         {
35             //根据资源的ID的变量名获得Field的对象, 使用反射机制来实现的
36             Field field = R.drawable.class.getField(name);
37             //取得并返回资源的id的字段(静态变量)的值,使用反射机制
38             return Integer.parseInt(field.get(null).toString());
39             
40         } catch (Exception e)
41         {
42             e.printStackTrace();
43         }
44         return 0;
45     }
46     
MainActivity

字符串解析:(正则)

 1     public static String patt = "\[em_[0-9]*\]"; 
 2     
 3     private static String newStr = null;
 4     
 5     public static String geTtextOfHtml(String str)
 6     {
 7         Pattern pattern = Pattern.compile(patt);
 8         
 9         Matcher matcher = pattern.matcher(str);
10         
11         StringBuffer sb = new StringBuffer();
12         
13         while(matcher.find())
14         {
15             //s 即为匹配成功的字符串
16             String s = matcher.group();
17             
18             if(newStr == null)
19             {
20                 newStr = str.replace(s.toString(), "<img src='" +s.substring(1, s.length()-1)+"'/>");
21             }
22             else
23                 
24             newStr = newStr.replace(s.toString(), "<img src='" +s.substring(1, s.length()-1)+"'/>");
25             
26             matcher.appendReplacement(sb, "<img src='" + s.substring(1, s.length()-1)+"'/>");
27         }
28         String tail = str.substring(str.lastIndexOf("]")+1);
29         
30         if(newStr!= null)
31         {
32             str = newStr;
33         }
34         return str;
35         
36     }
37     
RegexUtil

其他的就没什么了..layout就是最简答的定义一下,没有什么特别的地方

原文地址:https://www.cnblogs.com/mauiie/p/Tai.html