Android开发之Linkify


    <h1>Android开发之Linkify</h1>
<p>/*</p>
<p>* Android开发之PopupWindow</p>
<p>*</p>
<p>* Created on: 2011-8-11</p>
<p>* Author: blueeagle</p>
<p>* Email: [email protected]</p>
<p>*/</p>
<p></p>
<p>Linkify是一个helper类,他会自动地在TextView类(或者TextView的派生类)中通过RegEx模式匹配来创建超链接。</p>
<p> 那些匹配一个特定的RegEx模式的文本都将会被转换为一个可以单击的超链接,这些超链接可以隐式地使用匹配的字符串作为目标URI来触发StartActivity(new Intent(Intent.ACTION_VIEW,uri))。可以指定任何希望转换为连接的字符串模式。</p>
<p> 静态的Linkify.addLinks方法可以通过接受View来建立链接,Linkify类提供并支持一种或者多种默认的内容类型的位掩码(bitmask):WEB_URLS、EMAIL_ADDRESSES、PHONE_NUMBERS和ALL。</p>
<p> 下面的代码段展示了如何通过一个TextView来把Web和E-mail地址显示为超链接。当单击这些超链接的时候,他们就会分别打开浏览器或者电子邮件服务器。</p>
<p> 可以使用android:autoLink属性来在一个布局资源内部linkify View。它支持下列一个或者多个(使用|分隔开)顾名思义的值:none,web,email,phone,或者all。</p>
<p> 在布局文件和JAVA文件中可以做如下设置:</p>
<p>&lt;TextView android:id="@+id/myTextView1"<br>
android:layout_width= "wrap_content"<br>
android:layout_height="wrap_content"<br>
android:autoLink="web|email|phone"&gt;<br>
&lt;/TextView&gt;<br>
通过在程序中设置<br>
myTextView1.setText(“http://www.baidu.com”);<br>
myTextView1.setText(“13800138000”);<br>
myTextView1.setText(“[email protected]”);</p>
<p>也可以在string文件里设置字符串,同样,要用|字符分割开来。</p>
<p></p>
<p>下面对自定义的linkify做一些解释:搜索了一下,网上几乎所有的文章都是抄的Android高级编程这本书里的,希望大家在学习的时候多动动手,一下就抄过来真没意思。</p>
<p>自定义的linkify可以检测到特定字符串后,将其变为可点击的字符串形式从而可以从一个“源”中获取想要的东西。手册中对含有三个参数的addlinks这样写:</p>
<p>Applies a regex to the text of a TextView turning the matches into links. If links are found then UrlSpans are applied to the link text match areas, and the movement method for the text is changed to LinkMovementMethod.</p>
<p>那么用如下代码解析一下:</p>
<p align="left"> <strong>int</strong> flags = Pattern.<em>CASE_INSENSITIVE</em>;</p>
<p align="left"> Pattern p = Pattern.<em>compile</em>("\\bnews[0-9]*\\b", flags);</p>
<p align="left"> Linkify.<em>addLinks</em>(myTextview, p,"http://www.baidu.com/");</p>
<p align="left"> </p>
<p>这几行代码表示:[0-9]*表示通配符,0到9中没有或者有一个,<a>\\b</a>表示过滤掉前面的<a>\\b</a>当然你也可以写成”news[0-9]”;而所得的字符,将被添加到http://www.baidu.com/的后面;比如我在myTextView1.setText(“news1|news2|news”)设置以后,执行的结果将是有三个可以点击的文字,点击之后分别连接到<a href="http://www.baidu.com/news1">http://www.baidu.com/news1</a>;等当然,目前这个操作是对网页进行的操作,如果要对本地的内容提供器进行操作的话,就将后面的“源”写成content://。</p>
<p>当然,上述方法不适用于建立一个文字的超链接。对于文字超链接,可以使用如下的代码:</p>
<p align="left"> SpannableString sp = <strong>new</strong> SpannableString("点击百度");
</p>
<p align="left"> //设置超链接 </p>
<p align="left"> sp.setSpan(<strong>new</strong> URLSpan("http://www.baidu.com"), 2, 4,
</p>
<p align="left"> Spanned.<em>SPAN_EXCLUSIVE_EXCLUSIVE</em>); </p>
<p align="left"> myTextview.setText(sp);</p>
<p> myTextview.setMovementMethod(LinkMovementMethod.<em>getInstance</em>());
</p>
<p>别的都没什么问题,就看那个2,4代表字符串从第三个字符起到第四个字符结束。最后一句话表示这个文字可以点击。</p>
<p></p>
<p>对于Linkify的MatchFilter和Transform Filter我认为没有什么特别的研究价值。在这里不做多的说明了。</p>
<p></p>
 

你可能感兴趣的:(java,工作)