• 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就是最简答的定义一下,没有什么特别的地方

  • 相关阅读:
    死啃了String源码之后
    springBoot中Bean的生命周期
    @RequestMapping,@RequsetBody等注解说明
    mybatis的逆向工程的使用
    java中的Arrays这个工具类你真的会用吗
    Search in Rotated Sorted Array leetcode的第33道题
    看了Java的Class的源码,我自闭了
    面试被问了三次的http状态码到底有什么
    搞懂HashMap,这一篇就够了
    十大排序的java实现(配有动图)
  • 原文地址:https://www.cnblogs.com/mauiie/p/Tai.html
Copyright © 2020-2023  润新知