ClickableSpan跟TouchableSpan
ClickableSpan和TouchableSpan:
以下是我的ClickableSpan.java和TouchableSpan.java代码:
复制代码
然后,我让LinkTouchMovementMethod类继承LinkMovementMethod类;onTouchEvent()方法中,onClick变成了onTouch:
复制代码
然后,在你的MovementMethod中做适当的更改:
复制代码
以下是我的ClickableSpan.java和TouchableSpan.java代码:
- import android.text.TextPaint;
- import android.text.style.CharacterStyle;
- import android.text.style.UpdateAppearance;
- import android.view.MotionEvent;
- import android.view.View;
- /**
- * If an object of this type is attached to the text of a TextView
- * with a movement method of LinkTouchMovementMethod, the affected spans of
- * text can be selected. If touched, the {@link #onTouch} method will
- * be called.
- */
- public abstract class TouchableSpan extends CharacterStyle implements UpdateAppearance {
- /**
- * Performs the touch action associated with this span.
- * @return
- */
- public abstract boolean onTouch(View widget, MotionEvent m);
- /**
- * Could make the text underlined or change link color.
- */
- @Override
- public abstract void updateDrawState(TextPaint ds);
- }
然后,我让LinkTouchMovementMethod类继承LinkMovementMethod类;onTouchEvent()方法中,onClick变成了onTouch:
- import android.widget.TextView;
- public class LinkTouchMovementMethod extends LinkMovementMethod
- {
- @Override
- public boolean onTouchEvent(TextView widget, Spannable buffer,
- MotionEvent event) {
- int action = event.getAction();
- if (action == MotionEvent.ACTION_UP ||
- action == MotionEvent.ACTION_DOWN) {
- int x = (int) event.getX();
- int y = (int) event.getY();
- x -= widget.getTotalPaddingLeft();
- y -= widget.getTotalPaddingTop();
- x += widget.getScrollX();
- y += widget.getScrollY();
- Layout layout = widget.getLayout();
- int line = layout.getLineForVertical(y);
- int off = layout.getOffsetForHorizontal(line, x);
- TouchableSpan[] link = buffer.getSpans(off, off, TouchableSpan.class);
- if (link.length != 0) {
- if (action == MotionEvent.ACTION_UP) {
- link[0].onTouch(widget,event); //////// CHANGED HERE
- } else if (action == MotionEvent.ACTION_DOWN) {
- link[0].onTouch(widget,event); //////// ADDED THIS
- Selection.setSelection(buffer,
- buffer.getSpanStart(link[0]),
- buffer.getSpanEnd(link[0]));
- }
- return true;
- } else {
- Selection.removeSelection(buffer);
- }
- }
- return super.onTouchEvent(widget, buffer, event);
- }
- }
然后,在你的MovementMethod中做适当的更改:
- TextView tv = (TextView) findViewById(R.id.tv);
- tv.setMovementMethod(new LinkTouchMovementMethod());
- Now to show the text:
- touchableSpan = new TouchableSpan() {
- public boolean onTouch(View widget, MotionEvent m) {
- ...
- }
- public void updateDrawState(TextPaint ds) {
- ds.setUnderlineText(false);
- ds.setAntiAlias(true);
- }
- };
- String rv = "Text to span";
- text = new SpannableString(rv);
- text.setSpan(touchableSpan, begin, end, 0);
- tv.setText(text, BufferType.SPANNABLE);
相关推荐
- 商品的spu、sku及其之间的关系 SPU:标准化产品单元 SKU:库存量单位 spu和sku都是属性值的集合。商品规格,就是我们所说的SKU,是最小库存单元; 商品参数,就是我们所说的SPU,是标准化产品单元。参数: 参数是用于描述商品的属性。例如手机的核数。 商品跟品牌不是同一个概念 SKU和商品之间的关系
- 查询数据库中的相同值得所有表跟字段【存储过程】
- SQL Server 第三堂课,学习数据库函数。跟C#语言异曲同工,同样是由输入参数,输出参数,函数体,返回值四要素组成,不同的是语法和写法。掌握知识的关键在与学好C#语言的函数
- 缺陷记录日志跟学习时间表
- javaweb工程,Servlet里面获取当前WEB跟路径的文件绝对路径地址
- 解决WebView跟ScrollView冲突
- 禁止Home键跟返回键的使用
- 求一元二次方程的2个跟
- 跟Microsoft.AspNet.Identity学习哈希加盐法
- rem布局,根据不用设备分辨率更改跟字体大小
- ubuntu 停命令按转jdk
- 加上selected不就默许被选中