我想在scrollview中有一个EditText,这个EditText需要可滚动。所以我做了一个定制的如下:
public class myEditText extends EditText {
public myEditText(Context context) {
super(context);
}
public myEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public myEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
this.getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(ev);
}
}
这个EditText只有一个问题,就是当文本变得很长时,包含它的Scrollview会因某种原因跳转。这使我无法在一定长度后编辑文本。有人知道为什么会这样吗?
答案 0 :(得分:0)
我想我解决了它。
问题是当EditText中有光标时,bringPointIntoView(int offset)方法会使EditText滚动到光标所在的位置,这样光标就会在你的视线中,你可以编辑文本。通常它是如何工作的,但是当EditText在ScrollView中时,而不是滚动EditText,它也会使ScrollView滚动。这就是我看到ScrollView跳转的原因。
解决方案只是覆盖了bringPointIntoView方法。
因此,如果有人想在ScrollView中使用可滚动的EditText,我认为这可能有所帮助:
public class myEditText extends EditText {
public myEditText(Context context) {
super(context);
}
public myEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public myEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
this.getParent().requestDisallowInterceptTouchEvent(true);
return super.onTouchEvent(ev);
}
@Override
public boolean bringPointIntoView(int offset) {
return false;
}
}