SpannableString 来改变textView中http协议,手机号,已经你想要改变的字的颜色,以及添加onClick事件

这是我自己封的俩个类,只要调用就能使用,相当简单:

package com.example.spanable_textview;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import com.example.spanable_textview.MainActivity.spannableListener;

//这个类是获取SpannableString对象,以及添加颜色,跟点击事件的

import android.graphics.Color;

import android.text.Spannable;

import android.text.SpannableString;

import android.text.Spanned;

import android.text.style.ForegroundColorSpan;

import android.view.View;

import android.view.View.OnClickListener;

public class getSpannableString{

/**

*

* @param s    textView的内容

* @param str  你所要改变的字符串,其实主要是要的他的长度

* @param start_  开始的位置

* @param listener  监听器

* @return

*/

//这个是你所要改变的内容

public static SpannableString getClickableSpan(CharSequence s, String str,int start_,OnClickListener listener) {

int start = start_;

int end = str.length();

SpannableString spanableInfo = new SpannableString(s);

spanableInfo.setSpan(new Clickable(listener),

start, end+start, Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

spanableInfo.setSpan(Color.BLUE, start, end+start,

Spanned.SPAN_EXCLUSIVE_INCLUSIVE);

return spanableInfo;

}

//这个是网络

public static  SpannableString  getClickableHttpSpan (CharSequence charSequence,OnClickListener listener){

SpannableString spanableInfo = new SpannableString(charSequence);

Pattern  pattern  =
Pattern.compile("((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\[email protected]#$%^&*+?:_/=<>]*)?)");

Matcher  matcher =pattern.matcher(charSequence);

if (matcher.find()) {

System.out.println("start="+matcher.start());

System.out.println("end=="+matcher.end());

spanableInfo.setSpan(new Clickable(listener), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

spanableInfo.setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

}

return spanableInfo;

}

//这是手机号

public static SpannableString  getClickablePhoneSpan(CharSequence  charSequence, OnClickListener listener){

SpannableString  spannableString  =new SpannableString(charSequence);

Pattern  pattern = Pattern.compile("(\\(86\\))?(13[0-9]|15[0-35-9]|18[0125-9])\\d{8}");

Matcher  matcher  =pattern.matcher(charSequence);

if (matcher .find()) {

spannableString.setSpan(new Clickable(listener), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

spannableString .setSpan(new ForegroundColorSpan(Color.BLUE), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

}

return  spannableString;

}

}

还有一个ClickableSpan的实现类,主要是为了实现点击鲜果

package com.example.spanable_textview;

import android.text.TextPaint;

import android.text.style.ClickableSpan;

import android.view.View;

import android.view.View.OnClickListener;

class Clickable extends ClickableSpan implements OnClickListener {

private final View.OnClickListener mListener;

public Clickable(View.OnClickListener l) {

mListener = l;

}

@Override

public void onClick(View v) {

mListener.onClick(v);

}

@Override

public void updateDrawState(TextPaint ds) {

ds.setColor(ds.linkColor);

ds.setUnderlineText(false); // 去掉下划线

}

}

这里有我的demo。有兴趣的可以看看http://download.csdn.net/download/u012808234/8356749

时间: 2024-10-13 16:45:09

SpannableString 来改变textView中http协议,手机号,已经你想要改变的字的颜色,以及添加onClick事件的相关文章

给网页中的元素添加onclick事件(引自锋利的jQuery)

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="generator" content="editplus" /> <title>给网页中的元素添加onclick事件</p></title> <script src="jquery-1.7.1

HTML中在a标签中添加onclick事件

1.链接的onclick 事件被先执行,其次是href属性下的动作; 2.假设链接中同时存在href 与onclick,如果想让href 属性下的动作不执行,onclick 必须得到一个false的返回值; 3.如果页面过长有滚动条,且希望通过链接的 onclick 事件执行操作.应将它的 href 属性设为 javascript:void(0);,而不要是 #,这可以防止不必要的页面跳动; 4.如果在链接的 href属性中调用一个有返回值的函数,当前页面的内容将被此函数的返回值代替; 在Jav

JavaScript例子1-给网页中所有&lt;p&gt;元素添加onclick事件

1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta charset="utf-8" /> 6 <title></title> 7 <script type="text/javascript"> 8 window.onload = function() { 9 var items = document.getElementsByTagName(&

一起学android之如何设置TextView中不同字段的字体颜色(22)

在这里先看看效果图: OK,有时候,在我们的项目中会要求TextView中文本有一部分的字体颜色不一样,这时我们应该使用 SpannableStringBuilder这个工具类,当然这个类的功能很强大,这里我只是实现上面的样式,其它的不做介绍, SpannableStringBuilder的实现接口是Spannable这个接口,而Spannable最终都实现了CharSequence,因此我们直 接可以通过TextView.setText()来进行设置. 下面给出实现代码: public cla

TextView 添加Onclick 无效

给TextView添加Onclick事件还需要配置android:clickable="true",否则点击无效. <TextView             android:id="@+id/user_register_button"             android:layout_width="wrap_content"             android:layout_height="wrap_content&qu

Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属

在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. res-layout-main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

[android篇]textview中片段响应点击事件(SpannableString)

项目需求 点击textView中的一小段文字,弹一个dialog框 失败解决方案 刚开始是用了两个textView水平布局,可想而知,当第一个textView快占满一行,还未换行时,第二个textView很可能出现换行排版问题 用spannableString的问题 小段文字有下划线 点击textView中的小段文字时,系统会当做url处理,给点击部分的text加一个蓝色的背景 解决方案 public class TouchableSpan extends ClickableSpan { pri

Android textview 同时改变字符串中部分字体的颜色与大小

Android TextView 改变字体主要有两种方法: 1.Html.fromHtml 获取一个用html格式表示的Spanned. 2.另一种方式是直接构造使用一个Spanned. 若要同时改变字符串中部分字体的颜色与大小,采用第一种方式 html.fromHtml,用font标签来实现时,不幸的是Android中对font的属性只支持color与face,但不支持size.那么完全使用font标签的html,是实现不了了. 使用html改变字体大小的,可以尝试<small>或<h

(转)Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性以及自定义链接到下一个Activity

在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及超级链接等属性呢?下面我们通过SpannableString的具体实例操作来演示一下. res-layout-main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns