Android TextView中实现点击文本超链接(无下划线)的封装类
来源:互联网 发布:java游戏制作的书 编辑:程序博客网 时间:2024/05/21 19:49
android中有的时候需要在TextView上设置一些超链接,点击这些超链接时进行一些操作。例如新浪微博上的一些关键字,点击时会跳转到相应的页面。
如何实现我们就直接看源码吧。
/** * *created by Mr.Simple, Aug 21, 20141:51:40 PM. *Copyright (c) 2014, hehonghui@umeng.com All Rights Reserved. * * ##################################################### * # # * # _oo0oo_ # * # o8888888o # * # 88" . "88 # * # (| -_- |) # * # 0\ = /0 # * # ___/`---'\___ # * # .' \\| |# '. # * # / \\||| : |||# \ # * # / _||||| -:- |||||- \ # * # | | \\\ - #/ | | # * # | \_| ''\---/'' |_/ | # * # \ .-\__ '-' ___/-. / # * # ___'. .' /--.--\ `. .'___ # * # ."" '< `.___\_<|>_/___.' >' "". # * # | | : `- \`.;`\ _ /`;.`/ - ` : | | # * # \ \ `_. \_ __\ /__ _/ .-` / / # * # =====`-.____`.___ \_____/___.-`___.-'===== # * # `=---=' # * # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # * # # * # 佛祖保佑 永无BUG # * # # * ##################################################### */package com.umeng.community.utils;import android.content.Context;import android.text.Html;import android.text.Spannable;import android.text.SpannableStringBuilder;import android.text.TextPaint;import android.text.method.LinkMovementMethod;import android.text.style.ClickableSpan;import android.text.style.URLSpan;import android.widget.TextView;/** * @author mrsimple */public abstract class TopicSpanWrapper extends ClickableSpan { protected Context mContext; protected TextView mTextView; /** * @param context * @param tv */ public TopicSpanWrapper(Context context, TextView tv) { mContext = context; mTextView = tv; updateClickSpan(tv); } /** * 更新Span * * @param rv */ public void updateClickSpan(TextView tv) { // 这里拼接超链接, 我在前后加了一个井号,可自行去除 String htmlLinkText = "<a href='这里可以填写某个url'>#" + tv.getText().toString() + "#</a>"; tv.setText(Html.fromHtml(htmlLinkText)); tv.setMovementMethod(LinkMovementMethod.getInstance()); CharSequence text = tv.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) tv.getText(); URLSpan[] urls = sp.getSpans(0, end, URLSpan.class); SpannableStringBuilder style = new SpannableStringBuilder(text); style.clearSpans(); // should clear old spans for (URLSpan url : urls) { // 设置Span style.setSpan(this, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } tv.setText(style); } } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); // 去掉超链接的下划线 ds.setUnderlineText(false); }}
使用示例 :
public class UserInfoActivity extends FragmentActivity implements OnClickListener { FragmentManager mFragmentMan; private TextView mUserNameTv; /* * (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.umeng_comm_user_info); initUIComponents(); } /** * */ private void initUIComponents() { mFragmentMan = getSupportFragmentManager(); mPostedFragment = new PostedFragment(); mFragmentMan .beginTransaction() .add(R.id.user_info_fragment_container, mPostedFragment, PostedFragment.class.getSimpleName()).commit(); // 布局就不给出了,总之user_name_tv是一个TextView mUserNameTv = (TextView) findViewById(R.id.user_name_tv); /** * 将TextView中的文本包装成可点击的超链接 */ new TopicSpanWrapper(this, mUserNameTv) { @Override public void onClick(View widget) { Toast.makeText(mContext, "点击了超链接文本", Toast.LENGTH_SHORT).show(); } }; }}
效果如图 :
点击以后
图片中Toast的文字和代码的不一致,是因为文中写的与我demo中的文字不一样,直接忽略这个问题即可。
0 1
- Android TextView中实现点击文本超链接(无下划线)的封装类
- Android TextView中实现点击文本超链接(无下划线)的封装类
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- Android使用TextView实现无下划线超链接
- android开发之TextView超链接无下划线
- 无下划线TextView超链接跳转
- TextView 设置无下划线超链接
- android中TextView实现多个可点击的文本
- Android 中为 TextView 的文本添加下划线
- JSTL 入门
- JAVA实现常用的正则表达式
- 百度员工离职总结:如何做个好员工?
- Swoole源码学习记录(四)——锁和信号(一)
- Codeforces 460C prsent(二分答案)
- Android TextView中实现点击文本超链接(无下划线)的封装类
- 单例模式——C++实现线程安全的单例
- oracle自关联表的子删父变功能实现
- MATLAB中图像处理的函数
- Eclipse中的快捷键
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- 各种小结
- 关于在eclipse中新建android项目后出现错误
- 发刚花费高好发给好