TextView SpannableString 超链接点击相应
来源:互联网 发布:sql 树形结构 编辑:程序博客网 时间:2024/05/29 09:30
趁着热乎记录一下
在weibo神马的应用中,常常会有TextView中有超链接的功能,例如“@....”一点击,就进入了这个人的主页等等
为了在应用中实现,我想了一个临时的解决方法,虽然不是在touch中相应,但是如果要求不是很苛刻的话,也能用
1.找到需要超链接的字串,为它实例化SpannableString
for(int i = 0;i<linkNames.length;i++){SpannableString spStr = new SpannableString(linkNames[i]);spStr.setSpan(new LinkClickableSpan(), 0, linkNames[i].length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);mTextView.append(spStr);}mTextView.setMovementMethod(LinkMovementMethod.getInstance());mTextView.setFocusable(false);setFocusable主要是为了让TextView失焦,以免和我listView上的item焦点冲突
linkNames是我需要超链接的内容,由于我的TextView中全部是一段一段的超链接,所以,一个循环搞定,如果有非超链接的内容,请同学们自行计算长度
2.重写ClickableSpan
private class LinkClickableSpan extends ClickableSpan { @Override public void onClick(final View widget) {final TextView tv = (TextView) widget;final int start = tv.getSelectionStart();final int end = tv.getSelectionEnd();final SpannableString spStr = new SpannableString(tv.getText()); final Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if(msg.what == 1){spStr.setSpan(new BackgroundColorSpan(Color.parseColor("#A00099CC")), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(spStr);}else if(msg.what == 2){spStr.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);tv.setText(spStr);//所需要的动作}} };new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtry {Message msg = new Message();msg.what = 1;mHandler.sendMessage(msg);Thread.sleep(100);msg = new Message();msg.what = 2;mHandler.sendMessage(msg);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start(); }}
由于ClickableSpan捕获不到ontouch事件,所以,想在touch动作触发的时候改变文字的背景显然不太可行了,有的同学说通过监听TextView的ontouch事件,然后计算可以得到具体touch在了哪个超链接上,但这样过于复杂,而且对于我来说,这个功能可有可无
所以,我通过线程延迟100毫秒,在click发生之后改变点击字体背景,这样,虽然没有touch的效果好,但是也总比什么反应都没有强吧,当然,你也可以选择没有响应的Click,那就不用这么麻烦了,Click里直接定义动作就OK了
3.补充一下
通过重写ClickableSpan中的updateDrawState()方法,可以改变字体颜色,设置下划线等等功能
@Overridepublic void updateDrawState(TextPaint ds) {// TODO Auto-generated method stub super.updateDrawState(ds);// ds.setHinting(Paint.HINTING_ON); ds.setUnderlineText(false);}
打完收工~~
- TextView SpannableString 超链接点击相应
- Textview设置不同颜色,下划线,加粗,超链接(SpannableString)
- Textview设置超链接点击事件
- Android TextView中文字通过SpannableString来设置超链接、颜色、
- 使用SpannableString设置部分文字大小、颜色、超链接、点击事件
- TextView上设置超链接,点击启动Activity
- TextView 显示html字符串,超链接可点击
- TextView实现超链接并自定义点击效果
- Android 中对TextView文本多重点击-SpannableString
- 设置TextView下划线并响应点击事件(SpannableString)
- [android篇]textview中片段响应点击事件(SpannableString)
- Android篇textview中片段响应点击事件(SpannableString)
- 设置TextView部分文字下划线并响应点击事件(SpannableString)
- SpannableString中的ClickableSpan和Textview点击事件冲突解决
- Android通过SpannableString实现超级链接 点击textview某些文字跳转
- textview点击指定字符串跳转 textview超链接效果
- android创建SpannableString超链接
- Android的TextView/EditText使用CharacterStyle&SpannableString来处理图片显示、字体样式、超链接等
- Java中DAO的实现
- MIC编程(8)——offload语句内调用的函数声明方式
- C网络编程 socket 字节顺序
- 帅呆了!滚动导航在单页网站中的应用《第三季》
- C#控件Enable设为false和true后的字体颜色修改
- TextView SpannableString 超链接点击相应
- 2013CSDN全国高校巡讲齐鲁工业大学站成功举办
- hibernate中pojo的含义
- 字体大宝库:15款漂亮的艺术字体免费下载
- POJ水题 放苹果
- Hdu 1542 Atlantis + Hdu 1255 覆盖的面积 (线段树矩形面积并)
- Linux下Apache的安装
- 享元模式(Flyweight)
- ubuntu中apt-get install 的默认安装路径