android富文本文件存储,Android富文本

上面虽然实现了点击效果,但是需求是点击的时候背景为灰色,抬起又是原有的背景颜色,自己试了多个方法没成功,最后找到这个:

public class LinkTouchMovementMethod extends LinkMovementMethod {

private TouchableSpan mPressedSpan;

@Override

public boolean onTouchEvent(TextView textView, Spannable spannable, MotionEvent event) {

if (event.getAction() == MotionEvent.ACTION_DOWN) {

mPressedSpan = getPressedSpan(textView, spannable, event);

if (mPressedSpan != null) {

mPressedSpan.setPressed(true);

Selection.setSelection(spannable, spannable.getSpanStart(mPressedSpan),

spannable.getSpanEnd(mPressedSpan));

}

} else if (event.getAction() == MotionEvent.ACTION_MOVE) {

TouchableSpan touchedSpan = getPressedSpan(textView, spannable, event);

if (mPressedSpan != null && touchedSpan != mPressedSpan) {

mPressedSpan.setPressed(false);

mPressedSpan = null;

Selection.removeSelection(spannable);

}

} else {

if (mPressedSpan != null) {

mPressedSpan.setPressed(false);

super.onTouchEvent(textView, spannable, event);

}

mPressedSpan = null;

Selection.removeSelection(spannable);

}

return true;

}

private TouchableSpan getPressedSpan(TextView textView, Spannable spannable, MotionEvent event) {

int x = (int) event.getX();

int y = (int) event.getY();

x -= textView.getTotalPaddingLeft();

y -= textView.getTotalPaddingTop();

x += textView.getScrollX();

y += textView.getScrollY();

Layout layout = textView.getLayout();

int line = layout.getLineForVertical(y);

int off = layout.getOffsetForHorizontal(line, x);

TouchableSpan[] link = spannable.getSpans(off, off, TouchableSpan.class);

TouchableSpan touchedSpan = null;

if (link.length > 0) {

touchedSpan = link[0];

}

return touchedSpan;

}

}

public abstract class TouchableSpan extends ClickableSpan {

private boolean mIsPressed;

private int mPressedBackgroundColor;

private int mNormalTextColor;

private int mPressedTextColor;

public TouchableSpan(int normalTextColor, int pressedTextColor, int pressedBackgroundColor) {

mNormalTextColor = normalTextColor;

mPressedTextColor = pressedTextColor;

mPressedBackgroundColor = pressedBackgroundColor;

}

public void setPressed(boolean isSelected) {

mIsPressed = isSelected;

}

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

ds.setColor(mIsPressed ? mPressedTextColor : mNormalTextColor);

ds.bgColor = mIsPressed ? mPressedBackgroundColor : Color.TRANSPARENT;

ds.setUnderlineText(false);

}

}

具体用法:

mSpannableString = new SpannableString(content);

mSpannableString.setSpan(new ForegroundColorSpan(Color.BLUE),0,2, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

mSpannableString.setSpan(new ForegroundColorSpan(Color.BLUE),4,6, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

mSpannableString.setSpan(span,0,2,Spanned.SPAN_INCLUSIVE_INCLUSIVE);

mTextMessage.setMovementMethod(new LinkTouchMovementMethod());

TouchableSpan span = new TouchableSpan(Color.BLUE,Color.BLUE,Color.GRAY) {

@Override

public void onClick(View widget) {

String text = ((TextView) widget).getText().toString().substring(0,2);

Toast.makeText(MainActivity.this,text,Toast.LENGTH_SHORT).show();

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值