android 给选中的文字添加点击事件和修改audoLink 的超链接样式
来源:互联网 发布:淘宝客营销软件 编辑:程序博客网 时间:2024/05/16 05:32
java :
package com.a;import java.util.regex.Matcher;import java.util.regex.Pattern;import java.util.regex.PatternSyntaxException;import android.net.Uri;import android.os.Bundle;import android.app.Activity;import android.graphics.Color;import android.text.Spannable;import android.text.SpannableStringBuilder;import android.text.Spanned;import android.text.TextPaint;import android.text.style.ClickableSpan;import android.text.style.URLSpan;import android.text.util.Linkify;import android.util.Log;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class AlinkActivity extends Activity {private TextView tv;private static final String TAG = "AlinkActivity";private Activity mActivity;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_alink);mActivity = this;tv = (TextView) findViewById(R.id.t1);String text = "Google wewew \n电话:1234812121 \n邮件:sd1233333@qq.com \n网址:www.baidu.com ";//给选中的文字添加链接和点击事件setTextLinkedStringBuilder("Google", tv, text,"http://www.google.com");//修改audoLink 的超链接样式setURLHightLight(tv);}private void setURLHightLight(TextView tv) {Linkify.addLinks(tv, Linkify.ALL); //不要在xml中添加 android:autoLink="all"Spannable sp = (Spannable) tv.getText();int end = sp.length();URLSpan[] urlSpans = sp.getSpans(0, end, URLSpan.class);SpannableStringBuilder ssb = new SpannableStringBuilder(sp);// ssb.clearSpans(); // here no need clear all old spansfor (URLSpan urlSpan : urlSpans) {Uri uri = Uri.parse(urlSpan.getURL());Log.e(TAG, "urlSpan " + uri.getScheme() + " " + uri);ssb.removeSpan(urlSpan);ssb.setSpan(new HightlightURLSpan(urlSpan.getURL()), sp.getSpanStart(urlSpan),sp.getSpanEnd(urlSpan), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);}tv.setText(ssb);}/** * * @author alvin * 替换 audolink 的样式 * */class HightlightURLSpan extends URLSpan {private String url;public HightlightURLSpan(String url) {super(url);this.url = url;}@Overridepublic void updateDrawState(TextPaint ds) {ds.setColor(Color.parseColor("#ff00ff"));// 指定颜色值ds.setUnderlineText(false); // 去掉下划线ds.setFakeBoldText(true);}@Overridepublic void onClick(View widget) {Toast.makeText(mActivity, url, 0).show();Log.e(TAG, url);}}protected SpannableStringBuilder setTextLinkedStringBuilder(String key,TextView tv, CharSequence text,String mURL) {SpannableStringBuilder ssb = new SpannableStringBuilder(text);Pattern pKey = null;try {pKey = Pattern.compile(key, Pattern.CASE_INSENSITIVE);} catch (PatternSyntaxException e) {e.printStackTrace();return ssb;}Matcher m = pKey.matcher(ssb);while (m.find()) {Log.e("TAG", "m:" + m.start() + "--" + m.end());ssb.setSpan(new LinkTextSpan(mURL), m.start(), m.end(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);}tv.setText(ssb);/** * tv.setMovementMethod(LinkMovementMethod.getInstance()); * 再设置玩text之后调用 */Linkify.addLinks(tv, Linkify.ALL); return ssb;}/** * @author alvin * 显示的文字不是链接,所以不继承 URLSpan,要不然设置无效 */class LinkTextSpan extends ClickableSpan {private static final String COLOR_HIGHT = "#659800";private String url;public LinkTextSpan(String url) {super();this.url = url;}@Overridepublic void onClick(View widget) {Toast.makeText(mActivity, url, 0).show();Log.e(TAG, url);}@Overridepublic void updateDrawState(TextPaint ds) {ds.setColor(Color.parseColor(COLOR_HIGHT));ds.setUnderlineText(true);ds.setFakeBoldText(true);}}}
下面时xml
<TextView android:id="@+id/t1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="25dp" />
0 0
- android 给选中的文字添加点击事件和修改audoLink 的超链接样式
- android 为TextView的部分文字设置超链接样式并监听点击事件
- android 为TextView的部分文字设置超链接样式并监听点击事件
- 给android的LinearLayout添加点击事件
- 给android的LinearLayout添加点击事件
- 给android的LinearLayout添加点击事件
- 给Android的LinearLayout添加点击事件
- 给android的LinearLayout添加点击事件
- 为 TextView 的部分文字设置超链接样式并监听点击事件
- RecyclerView添加点击事件和textView的超链接点击事件冲突
- js循环遍历ul中li的点击事件,给给选中li添加css
- Android富文本实现不同的文字添加点击事件
- Android给textview添加超链接事件
- TextView如何给其中的某一段文字添加点击事件?
- ECharts3.0如何给X轴中显示的文字添加点击事件!
- 给TextView添加点击事件的写法
- 给RecyclerView的Item添加点击事件
- 页面加载,给删除的超链接添加事件
- 关于逻辑或的一个小小应用注意点
- 条款24:若所有参数皆需类型转换,请为此采用non-member函数
- C++ Primer笔记9_构造函数_拷贝构造(深拷贝与浅拷贝)
- GDI+ 画刷、矩阵、基本绘图函数、文字、图像
- Android开发去掉actionbar发生错误
- android 给选中的文字添加点击事件和修改audoLink 的超链接样式
- 开发Android硬件驱动程序
- swift 性能弱爆了
- 多媒体编程——摄像头录像预览
- Android布局优化
- stl map底层之红黑树插入步骤详解与代码实现
- poj 1286 Necklace of Beads & poj 2409 Let it Bead(初涉polya定理)
- Android新手---对话框(一)
- python: scikit-image数字图像处理