ScrollView中的可滚动MultiLine TextView(无涉及的触摸交互)

时间:2015-06-04 20:13:27

标签: android xamarin android-edittext android-scrollview

我创建了一个滚动视图,其中间的EditText是multiLine(Scrollable)。编辑该视图并添加超出允许高度的行时,它会按预期滚动。但是,整个容器的父滚动视图也会滚动,就好像它跟在文本后面一样。

    <ScrollView
    p1:minWidth="25px"
    p1:minHeight="25px"
    p1:layout_width="match_parent"
    p1:layout_height="match_parent"
    p1:background="#F7F3DE"
    p1:id="@+id/scrollview">
    <RelativeLayout
        p1:layout_width="match_parent"
        p1:layout_height="match_parent"
        p1:clickable="true"
        p1:focusableInTouchMode="true"
        p1:id="@+id/realtiveLayout">
        <EditText
                p1:id="@+id/editText"
                p1:focusableInTouchMode="true"
                p1:layout_width="match_parent"
                p1:layout_height="150dp"
                p1:hint="Comments"
                p1:background="#00000000"
                p1:textSize="16sp"
                p1:textColor="#555555"
                p1:gravity="top"
                p1:minLines="5"
                p1:maxLines="5"
                p1:inputType="textCapSentences|textMultiLine"
                p1:scrollHorizontally="false"
                p1:layout_marginTop="5dp"
                p1:textColorHint="#A9A9A9" />
        </RelativeLayout>
    </ScrollView>

是否有人见过或知道此问题的解决方案?

(注意:这不是如何通过触摸滚动一个而不是另一个的问题,因为我已经理解了。这是一个主要的scrollview在EditText内部输入时移动的问题,即使文本没有降低但转而滚动。

1 个答案:

答案 0 :(得分:1)

这里有一个答案: https://stackoverflow.com/a/28180281/3956566

使用此Managing Touch Events in a ViewGroup

每个子触摸都需要提供一个拦截,将父触摸事件返回为false。在使用子元素时禁用父触摸事件。您可以通过在java中创建onInterceptTouchEvent(MotionEvent ev)来完成此操作。

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    /*
     * This method JUST determines whether we want to intercept the motion.
     * If we return true, onTouchEvent will be called and we do the actual
     * scrolling there.
     */
    //  ...
    // In general, we don't want to intercept touch events. They should be 
    // handled by the child view.
    return false;
}

修改

提供了这个答案
  

https://stackoverflow.com/users/498468/carl-odonnell

应该有所帮助:

https://stackoverflow.com/a/5090420/3956566 触摸文本字段时禁用滚动视图的位置。

// Get the ScrollView
final ScrollView myScroll = (ScrollView) findViewById(R.id.display_scrollview);


// Disable Scrolling by setting up an OnTouchListener to do nothing
myScroll.setOnTouchListener( new OnTouchListener(){ 
@Override
public boolean onTouch(View v, MotionEvent event) {
    return true; 
    }
});

// Enable Scrolling by removing the OnTouchListner
tvDisplayScroll.setOnTouchListener(null);