<ScrollView android:id="@+id/sv_scrollview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fadingEdge="none" android:scrollbars="none" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <cn.ls.widget.ScrollviewEdit android:id="@+id/sv_feedback" android:layout_width="fill_parent" android:layout_height="100dip" android:layout_gravity="center" android:fadingEdge="none" android:scrollbars="none" android:visibility="visible" > <LinearLayout android:layout_width="fill_parent" android:layout_height="100dip" android:gravity="center" android:scrollbars="vertical" > <EditText android:id="@+id/et_feedback" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="13dip" android:layout_marginRight="13dip" android:clickable="true" android:enabled="false" android:focusable="false" android:gravity="top" android:scrollbars="vertical" android:singleLine="false" android:background="@null" android:text="" /> </LinearLayout> </cn.ls.widget.ScrollviewEdit> </LinearLayout> </ScrollView>
这里是自定义的Scrollview,当然你也可以使用原生的。
因为我的整个页面是在一个Scrollview中,所以这又涉及到Scrollview嵌套Scrollview的问题,所以需要屏蔽父级的Scrollview.
public class ScrollviewEdit extends ScrollView { private static final String TAG = "ScrollviewEdit"; private ScrollView parent_scrollview; public ScrollView getParent_scrollview() { return parent_scrollview; } public void setParent_scrollview(ScrollView parent_scrollview) { this.parent_scrollview = parent_scrollview; } public ScrollviewEdit(Context context) { super(context); } public ScrollviewEdit(Context context, AttributeSet attrs) { super(context, attrs); } int currentY; @Override public boolean onInterceptTouchEvent(MotionEvent ev) { LogUtils.i(TAG, "onInterceptTouchEvent--------"); if (parent_scrollview == null) { return super.onInterceptTouchEvent(ev); } else { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 将父scrollview的滚动事件拦截 currentY = (int) ev.getY(); setParentScrollAble(false); LogUtils.i(TAG, "将父scrollview的滚动事件拦截-----"); return super.onInterceptTouchEvent(ev); } else if (ev.getAction() == MotionEvent.ACTION_UP) { // 把滚动事件恢复给父Scrollview setParentScrollAble(true); LogUtils.i(TAG, "把滚动事件恢复给父Scrollview-----"); } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { } } return super.onInterceptTouchEvent(ev); } /** * 是否把滚动事件交给父scrollview * @param flag */ private void setParentScrollAble(boolean flag) { parent_scrollview.requestDisallowInterceptTouchEvent(!flag); } }
其中private ScrollView parent_scrollview; 代表传递过来的父级Scrollview.