使ListView中的multiLine Textview可滚动

时间:2017-05-29 13:31:49

标签: android listview scroll

我试图让我的多行文本视图在listview中可滚动但失败了。 这是我的一些代码:

 myCommentTextView.setMovementMethod(new ScrollingMovementMethod());`

 <TextView
        android:id="@+id/textViewComment"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:scrollbarAlwaysDrawHorizontalTrack="false"
        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:overScrollMode="always"
        android:scrollbarStyle="insideOverlay"
        android:scrollbars="vertical"
        android:text="Comment"
        android:textSize="14sp"
        android:typeface="normal" />
在搜索SO之后,有人建议这个答案:(我能够复制但忘记保存链接)

class MyTextView extends TextView
{

  public MyTextView(Context context)
  {
    super(context);
    // TODO Auto-generated constructor stub
  }

  @Override
  public boolean dispatchTouchEvent(MotionEvent event)
  {
    boolean ret;
    ret = super.dispatchTouchEvent(event);
    if(ret)
    {
        list.requestDisallowInterceptTouchEvent(true);
    }
    return ret;
  }

}

我尝试制作这样的自定义类,但android studio在行list.requestDisallowInterceptTouchEvent(true);下显示红色下划线(无法解析方法)和extends TextView(应扩展android.support.v7.widget.appcompatTextView)

这是我的班级:

import android.content.Context;
import android.view.MotionEvent;
import android.widget.TextView;    
import java.util.List;


    public class MyTextView extends TextView {

        public MyTextView(Context context)
        {
            super(context);
            // TODO Auto-generated constructor stub
        }
        public boolean dispatchTouchEvent(MotionEvent event)
        {
            boolean ret;
            ret = super.dispatchTouchEvent(event);
            if(ret)
            {
                List.requestDisallowInterceptTouchEvent(true);

            }
            return ret;
        }

    }

我可以将textview更改为appCompatTextView,即使我不明白为什么,因为从源头上看,它似乎没问题,因为它是公认的答案。但是,最重要的代码List.requestDisallowInterceptTouchEvent(true);仍然是错误的。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我找到了答案,requestDisallowInterceptTouchEvent确实是这里的关键,

 View.OnTouchListener listener = new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                boolean isLarger;

                isLarger = ((TextView) v).getLineCount()
                        * ((TextView) v).getLineHeight() > v.getHeight();
                if (event.getAction() == MotionEvent.ACTION_MOVE
                        && isLarger) {
                    v.getParent().requestDisallowInterceptTouchEvent(true);

                } else {
                    v.getParent().requestDisallowInterceptTouchEvent(false);

                }
                return false;
            }
        };

        holder.comment.setOnTouchListener(listener);