返回

EditText嵌套ScrollView后滑动不灵?这样做能让内容滑动更流畅!

Android

无论在Android还是iOS开发中,我们经常会遇到要在ScrollView中放入EditText控件的需求。但很多时候,我们会发现EditText无法正常滑动。这是因为当ScrollView获取到触摸事件后,事件就会被消费掉,传递不到内部控件,导致EditText无法滑动。

如果ScrollView嵌套了EditText,那么EditText就不能滑动。这是因为ScrollView将滑动事件消费了,导致滑动事件没有向下传递,EditText根本没有接收到该事件。看到这里,相信大家已经想到好几种解决方法了吧。下面给出我的建议。

解决方法一:将EditText放在LinearLayout中,再将LinearLayout放在ScrollView中

这是最简单的一种解决方法,只需要将EditText放在LinearLayout中,再将LinearLayout放在ScrollView中即可。这样一来,EditText就能滑动啦!

<ScrollView>
    <LinearLayout>
        <EditText />
    </LinearLayout>
</ScrollView>

解决方法二:给ScrollView设置属性android:fillViewport="true"

另一种解决方法是给ScrollView设置属性android:fillViewport="true"。这样一来,ScrollView就会填满整个屏幕,并且EditText就可以滑动啦!

<ScrollView android:fillViewport="true">
    <EditText />
</ScrollView>

解决方法三:自定义ScrollView,重写onInterceptTouchEvent方法

如果以上两种方法都不行,那么你可以自定义一个ScrollView,重写onInterceptTouchEvent方法,在该方法中返回false,这样一来,ScrollView就不会消费滑动事件,EditText就能滑动啦!

public class MyScrollView extends ScrollView {

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return false;
    }
}

总结

以上三种方法都可以解决ScrollView嵌套EditText无法滑动的问题。具体使用哪种方法,可以根据实际情况来选择。