最近在项目中做一个文字展开/收起的功能,TextView默认显示2行,点击旁边的展开按钮显示全部内容。我这里的收起功能使用TextView的setMaxLine方法。然而我的TextView中有用到ClickableSpan,这就导致在TextView的内容收起时,如果点击TextView,文本内容就会擅自滑动,让人很是郁闷。究其原因,是因为我为TextView设置的LinkMovementMethod的touch事件在捣鬼:这货继承的是ScrollingMovementMethod,当调用onTouchEvent方法的时候会让控件内容可以滑动,所以我们可以用下边自定义的继承自BaseMovementMethod的类来取代LinkMovementMethod:
/**
* 替换LinkMovementMethod,这个不会触发TextView的滑动事件
* 单例模式——饿汉
*/
public static class CustomMovementMethod extends BaseMovementMethod {
private static CustomMovementMethod customMovementMethod;
public static CustomMovementMethod getInstance() {
if (customMovementMethod == null) {
synchronized (CustomMovementMethod .class) {
if (customMovementMethod == null) {
customMovementMethod = new CustomMovementMethod ();
}
}
}
return customMovementMet