0

AndroidのTextViewでかなり奇妙なバグが発生しています。テキストはTextViewの上部の境界線上をランダムに流れることができ、ユーザーはそれを操作します。これは、TextViewがアニメーションで高さを変更したときに発生するようです(クリックすると拡大および縮小します)。

だからここにそれがどのように見えるか(Android開発ツールで有効にされた境界線の描画を表示し、TextViewの境界線を赤でマークしました)http://s7.postimage.org/c1ynrbwjv/so_full.png

invalidate()postInvalidate()のいずれか)、requestLayout()を呼び出し、TextViewの重力をリセットしてみました。また、 setMaxHeight()の代わりにgetLayoutParams()。height
を 使用して高さを設定するように、拡大および縮小するアニメーションを書き直そうとしました。 最後に、TextViewをLinearLayoutに配置し(TextViewの高さをlayout_height = "wrap_content"に設定)、TextViewの代わりにLinearLayoutを展開/縮小しました(したがって、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

4

1 に答える 1

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が「テキストバッファ内のリンクをトラバースし、必要に応じてスクロールする移動メソッドです。DPadCenterまたはEnterを使用したリンクのクリックをサポートしているためだと思います。」

于 2013-02-05T17:18:45.113 に答える