我试图让我的多行文本视图在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);
仍然是错误的。
如何解决这个问题?
答案 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);