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
字符串解析:(正则)
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
其他的就没什么了..layout就是最简答的定义一下,没有什么特别的地方