Scrollview中的自定义Scrollable EditText使Scrollview跳转

时间:2015-07-29 13:10:24

标签: android android-edittext scrollview

我想在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会因某种原因跳转。这使我无法在一定长度后编辑文本。有人知道为什么会这样吗?

1 个答案:

答案 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;
    }
}