13

多くのテキストを含む TextView があります。この TextView がmaxLines設定されているため、最初の 8 行ほどしか表示されません。「もっと読む」ボタンもあるので、自分で TextView の展開を処理します。

私の問題は、スクロールバーを指定したことがないにもかかわらず、TextView が少し (一度に半分の行だけ) スクロールすることがあることです。TextView が ListView 内にあるため、この問題はさらに悪化します。そのため、ユーザーがメインの ListView をスクロールすると、次のように TextView が少しスクロールすることがあります。

ブラブラ

TextView がスクロールしないようにするにはどうすればよいですか?

4

5 に答える 5

2

だから私は少し調査を行い、スクロールを無効にするだけでは簡単ではないと思いますが、できる/試すことができることがいくつかあります.

1 つ目は setEnabled(false) ですが、これによりリンクが無効になり、テキストの色が変更されます。

2 つ目は、scrollTo(int x, int y) メソッドを使用することをお勧めします。TextView のテキストを設定した後、単に scrollTo(0,0) 、私の推測では、スクロールを引き起こすのは大きなテキストだけなので、これで処理できるはずです。

あなたが試すことができると私が見つけた3番目の答えはもう少し複雑で、正確にはあなたの質問ではありませんが、うまくいくかもしれませんここで見つけることができます.

public class LinkMovementMethodOverride implements View.OnTouchListener{

@Override
public boolean onTouch(View v, MotionEvent event) {
    TextView widget = (TextView) v;
    Object text = widget.getText();
    if (text instanceof Spanned) {
        Spanned buffer = (Spanned) text;

        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);

            ClickableSpan[] link = buffer.getSpans(off, off,
                    ClickableSpan.class);

            if (link.length != 0) {
                if (action == MotionEvent.ACTION_UP) {
                    link[0].onClick(widget);
                } else if (action == MotionEvent.ACTION_DOWN) {                             
                    // Selection only works on Spannable text. In our case setSelection doesn't work on spanned text
                    //Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
                }
                return true;
            }
        }

    }

    return false;
}

}

「その後、タッチリスナーとしてターゲットテキストビューに適用します:-

textview.setOnTouchListener(新しい LinkMovementMethodOverride());"

于 2014-06-04T20:19:04.353 に答える
0

私のプロジェクトでもっと見るような機能が必要だったので、この SO 投稿からテキストビューを省略して表示しました。それは魔法のように機能し、テキストが省略されたかどうかを確認するためのインターフェイスも提供します。これでうまくいくはずです。

于 2014-06-04T01:01:49.003 に答える
-1

これらのコード行を xml で試してください

android:isScrollContainer="false"
android:ellipsize="end"
于 2014-06-04T00:52:01.613 に答える