Scrollview自定义可滚动的EditText使Scrollview跳转
Customized Scrollable EditText in Scrollview Makes the Scrollview Jumps
我想在滚动视图中有一个 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会因为某种原因跳转。这使我无法在一定长度后编辑文本。有人知道为什么会这样吗?
我想我解决了。
问题是当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;
}
}
我想在滚动视图中有一个 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会因为某种原因跳转。这使我无法在一定长度后编辑文本。有人知道为什么会这样吗?
我想我解决了。
问题是当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;
}
}