0

現在、私は使用してListViewおり、正常に動作しています。しかしListView、段落のようなテキストがあり、それらの2行のテキストを表示して残りのテキストをスクロール可能にしたいだけですが、のTextView中でスクロール可能にするListViewと、TextView親 ( ListView) のフォーカスを取得し、スクロールさせません。

TextViewのスクロールプロパティを妨げないこのスクロール可能な機能を実現できListViewますか?

ありがとうございました。

4

3 に答える 3

4

私は次の方法でこれを行うことができました:

ListAdapter の getView メソッドに行の TextView オブジェクトを取得し、書き込む

textView.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
       v.getParent().getParent().requestDisallowInterceptTouchEvent(true);
       return false ;
   }
});

TextView に触れるときは、スクロールを制御します

于 2014-05-22T14:41:14.750 に答える
1

あなたが達成しようとしていることは本当に不可能です。OS は、リストとリスト行の段落をスクロールしようとしていることをどのように知ることができますか? 実際のリスト自体をスクロールする前に、基本的にリスト行の段落の一番下までスクロールする必要があります。これはユーザーを混乱させ、一般的な UX ではありません。

ExpandableListViewを調べることをお勧めします。各行の折りたたまれたバージョンを使用できます。この場合、各リスト行に 2 行のテキストのみです。ユーザーが行をタップすると、完全な段落フォームに展開され、リストは常にスクロール可能になります。オンラインで見つけることができるはずのチュートリアルがたくさんあります。

于 2013-04-25T14:09:17.670 に答える
1

不可能なことは何もありませんが、物事を行う方法は難しいかもしれません. このことは直接的には達成できませんが、間接的には達成できますし、達成できました。どのように達成したかは少し複雑ですが、はい、どのように達成したかを共有します。

ListViewをクリックするとTextview、リストビューのタッチモードをブロックして、それらの toch メソッドが互いにインターセプトしないようにします 。これは、親 ( ) のrequestDisallowInterceptTouchEvent(true); このブロックを使用して行うことができます。TouchListenerListView

クリックTextViewすると、タッチリスナーとsetMovementMethod() も許可されますが、移動のためにカスタムクラスを作成し、クラスはフォローしています

public class myScrollMethod extends ScrollingMovementMethod {

    @Override
    public void onTakeFocus(TextView widget, Spannable text, int dir) {
        // TODO Auto-generated method stub
        super.onTakeFocus(widget, text, dir);
    }

    @Override
    public boolean onKeyDown(TextView widget, Spannable buffer,
            int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_DPAD_DOWN:
            for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) {
                down(widget, buffer);
            }
            return true;
        case KeyEvent.KEYCODE_DPAD_UP:
            for (int i = 0, scrollAmount = getScrollAmount(widget); i < scrollAmount; i++) {
                up(widget, buffer);
            }
            return true;
        default:
            return super.onKeyDown(widget, buffer, keyCode, event);
        }
    }

    private int getScrollAmount(TextView widget) {
        final int visibleLineCount = (int) ((1f * widget.getHeight()) / widget
                .getLineHeight());
        int scrollAmount = visibleLineCount - 1;
        if (scrollAmount < 1) {
            scrollAmount = 1;
        }
        return scrollAmount;
    }


}

その後、親をクリックすると、親セットのTouchIntercepterがtrueに設定され、親を保持してスクロールが開始されます。

このようにして、私はこの要件を正常に達成しました

于 2013-04-29T07:17:00.083 に答える