ScrollView中的可滚动EditText

时间:2012-02-26 22:22:27

标签: android android-layout android-edittext android-scrollview

我搜索了有关此主题的所有帖子,但仍然找不到任何解决方案。 我有一个大的布局,它可以使用ScrollView滚动,它还有可滚动的EditText。 如果我尝试滚动edittext,则布局开始滚动。我怎么解决呢?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ScrollView
        android:id="@+id/lroot"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fillViewport="true"

         >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/img6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:gravity="right"
                android:onClick="runInfo"
                android:src="@drawable/info_btn" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/splash" />

            <!-- Scrollable EditText -->
            <EditText
                android:id="@+id/EditText01"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:autoLink="all"
                android:background="@drawable/isim_soyisim"
                android:clickable="true"
                android:cursorVisible="true"
                android:gravity="left|top"
                android:scrollbars="vertical"
                android:inputType="textMultiLine"
                android:longClickable="false"
                android:maxLines="5"
                android:singleLine="false"

            />


        </LinearLayout>
    </ScrollView>

</LinearLayout>

2 个答案:

答案 0 :(得分:7)

试用此解决方案

Ref link

EditText EtOne = (EditText) findViewById(R.id.EditText01);
    EtOne.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (v.getId() == R.id.comment1) {
                        v.getParent().requestDisallowInterceptTouchEvent(true);
                        switch (event.getAction() & MotionEvent.ACTION_MASK) {
                        case MotionEvent.ACTION_UP:
                            v.getParent().requestDisallowInterceptTouchEvent(false);
                            break;
                        }
                    }
                    return false;
                }
            });

答案 1 :(得分:0)

package com.sam.views;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class CustomScrollview extends ScrollView{

    public CustomScrollview(Context context) {
        super(context);
    }

     public CustomScrollview(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public CustomScrollview(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                    super.onTouchEvent(ev);
                    break;

            case MotionEvent.ACTION_MOVE:
                    return false; // redirect MotionEvents to ourself

            case MotionEvent.ACTION_CANCEL:
                    super.onTouchEvent(ev);
                    break;

            case MotionEvent.ACTION_UP:
                    return false;

            default: Log.i("VerticalScrollview", "onInterceptTouchEvent: " + action ); break;
        }

        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
         return true;
    }
}