如何在Android中利用WebView打开TextView超链接

  介绍

今天就跟大家聊聊有关如何在Android中利用WebView打开TextView超链接,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

<强>使用Html

常规方法,给定一段标准Html文档,使用<代码> Html.fromHtml() 封装,直接使用TextView显示。

TextView  TextView =, (TextView), findViewById (R.id.detailed_question_tv_answer);   String  testString =扒?一般遇到这问题您可以这样哦:& lt; br> 1。可以& lt; font 颜色=& # 39;# ff8785& # 39;在https://www.yisu.com/zixun/& lt; a  href=" http://m.kaola.com ">催发货 哦~
2。然后耐心等待哦~
3.1 - 3天后新也可以拨打我们的客服。”;   textView.setMovementMethod (LinkMovementMethod.getInstance ());//设置链接颜色   textView.setLinkTextColor (getresource () .getColor (R.color.red_ff8785));   张成htmlString=Html.fromHtml (testString);   textView.setText (htmlString);

使用常规方法无论怎么设置,链接都会使用隐式意图打开,即使用外部的浏览器打开,不符合咱们产品的需求呀。怎么才能监听这个使用并使用内部WebView打开呢?使用SpannableStringBuilder。

<强>使用SpannableStringBuilder

直接上代码。

TextView  TextView =, (TextView), findViewById (R.id.detailed_question_tv_answer);   String  testString =,“亲,一般遇到这问题您可以这样哦:& lt; br> 1。可以& lt; font 颜色=& # 39;# ff8785& # 39;在https://www.yisu.com/zixun/& lt; a  href=" http://m.kaola.com ">催发货 哦~
2。然后耐心等待哦~
3.1 - 3天后新也可以拨打我们的客服。”;   textView.setMovementMethod (LinkMovementMethod.getInstance ());   textView.setLinkTextColor (getresource () .getColor (R.color.red_ff8785));   字符串linkText="催发货”;   int startIndexOfLink=testString.indexOf (linkText);   int endIndexOfLink=startIndexOfLink + linkText.length ();   SpannableStringBuilder SpannableStringBuilder=new SpannableStringBuilder (testString);   spannableStringBuilder。setSpan(新ClickableSpan () {   @Override   公共空间onClick(视图部件){   ActivityUtils.startWebviewActivity (DetailedQuestionActivity。“http://m.kaola.com”,这假);   }   },startIndexOfLink endIndexOfLink Spannable.SPAN_INCLUSIVE_EXCLUSIVE);   textView.setText (spannableStringBuilder);

当然,这个方法是有很大的局限性的,必须知道链接在文案中的具体位置,以及链接的地址才能够使用这种方法。按照这种思路,我们必须使用正则表达式获取对应的一个标签才能得到链接。这种方法拿到的链接在文案中的具体位置是难以把握的,很有可能出错。

<强> Html + spannableStringBuilder

有没有第三种方法,即能够解析到给定文案中的所有Html标签,又能够使用内置的WebView打开这个链接?从第一种方法中,我们直接使用<代码> Html.fromHtml() 方法拿到对应的张成的结果,我们可以从这里入手,看看这个方法是怎么解析Html标签的

public  static  Spanned  fromHtml (String 源,ImageGetter  imageGetter,   ,,,,,,,TagHandler  tagHandler), {//大敌;使用org.ccil.cowan.tagsoup.Parser作为解析器,,,,,,,   ,Parser  Parser =, new 解析器();   ,try  {   parser.setProperty才能(Parser.schemaProperty, HtmlParser.schema);   ,}catch  (org.xml.sax.SAXNotRecognizedException  e), {//才能,Should  not 发生。   throw 才能;new  RuntimeException (e);   ,}catch  (org.xml.sax.SAXNotSupportedException  e), {//才能,Should  not 发生。   throw 才能;new  RuntimeException (e);   ,}//大敌;使用HtmlToSpannedConverter将Ttml转换成跨越   HtmlToSpannedConverter  converter =,,new  HtmlToSpannedConverter (imageGetter,来源,还以为,tagHandler   ,,,,解析器);   ,return  converter.convert ();   }

接下来看一下<代码> HtmlToSpannedConverter.convert() 这个方法.HtmlToSpannedConverter实现了ContentHandler接口,ContentHandler用于处理Xml文档的解析细节。

public  Spanned 转换(),{      ,mReader.setContentHandler(这个);   ,try  {   InputSource mReader.parse才能(new  (new  StringReader (mSource)));   ,}catch  (IOException  e), {//才能,断开连接,我方表示歉意reading 得到a 字符串只There  should  not  be  IO 问题。   throw 才能;new  RuntimeException (e);   ,}catch  (SAXException  e), {//才能,TagSoup 并# 39;t  throw  parse 例外。   throw 才能;new  RuntimeException (e);   ,}      ,//Fix  flags 以及range  for  paragraph-type 标记。   ,对象[]obj =, mSpannableStringBuilder.getSpans (0,, mSpannableStringBuilder.length (),, ParagraphStyle.class);   ,for  (int 小姐:=,0;,小姐:& lt;, obj.length;,我+ +),{   int 才能;start =, mSpannableStringBuilder.getSpanStart (obj[我]);   int ,才能最终获得=,mSpannableStringBuilder.getSpanEnd (obj[我]);//才能,If 从而last  line  of 从而range  is 空白,back  off  by 一个。   if 才能;(最终获得成功;2,祝辞=,0),{   ,,if  (mSpannableStringBuilder.charAt(最终获得成功;1),==,& # 39;\ n # 39;,,,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

如何在Android中利用WebView打开TextView超链接