2017-05-29 40 views
0

我想让我的多行textview在列表视图中滚动但失败。 这里是一些代码,我有:使多行文本视图在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工作室展示红色下划线的行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);将保持错误。

如何解决这个问题?

+0

尝试 '机器人:MAXLINES = “5” //什么ü需要'。 –

+0

试过但没有工作,我认为问题是listview正在接管焦点/触摸监听器。所以即使我触摸并滚动文本视图,整个列表也滚动 –

回答

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); 
相关问题