我在Android上遇到了一个相当奇怪的TextView错误。文本可以随机时间流过TextView的顶部边框,然后用户与之交互。看起来这种情况发生在TextView用动画改变它的高度时(它在点击时会扩展和缩小)。
所以这里看起来如何(用android dev工具查看边框绘图,我用红色标记了TextView的边框)http://s7.postimage.org/c1ynrbwjv/so_full.png
我尝试过调用 invalidate()( postInvalidate()), requestLayout()并重置 gravity of TextView。
我还尝试重写扩展和缩小动画,使用 getLayoutParams()。height 来设置高度,而不是 setMaxHeight()。
最后我将TextView放入LinearLayout(将TextView高度设置为layout_height =“wrap_content”),并扩展/缩小LinearLayout而不是TextView(因此TextView的边界不会直接更改)。但是,正如你猜测的那样,没有帮助。
TextView布局(BoardPostText扩展TextView):
<my.package.view.BoardPostText
android:id="@+id/postText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/postTitle"
android:clickable="true"
android:linksClickable="true"
android:longClickable="true"
android:maxHeight="@dimen/post_image_max_height"
android:paddingLeft="5dp"
android:textColor="@color/post_data_text_color"
android:textSize="@dimen/post_data_text_size"
android:textColorLink="@color/post_link_color" />
TextView的代码https://gist.github.com/d47e8eafb1bcff7c8db1
答案 0 :(得分:1)
我发现发生了这样的行为,然后MotionEvent发生在超链接上。因为我只需要可以点击的跨度,所以我做了这样的解决方法:
public static class JustClickableMethod extends LinkMovementMethod {
public static MovementMethod getInstance() {
return new JustClickableMethod();
}
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;
if( action != MotionEvent.ACTION_UP ) {
return true;
}
return super.onTouchEvent(widget, buffer, event);
}
}
将此移动方法设置为TextView后,可点击的跨度仍会获得onClick()事件,但文本流动的错误消失。
我认为这是因为LinkMovementMethod是“遍历文本缓冲区中链接的移动方法,必要时滚动。支持单击带有DPad Center的链接或输入。”