it-roy-ru.com

EditText не прокручивается внутри ScrollView

У меня есть ScrollView внутри, который EditText, который установлен для вертикальной прокрутки. Но это не свитки. Вместо этого весь макет прокручивается, Всякий раз, когда я пытаюсь прокрутить EditText. Ниже код -

<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<LinearLayout 
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical" >

<TextView
    Android:id="@+id/b1"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="39dp"
    Android:text="Title"
    Android:textColor="#3bb9ff"
    Android:textSize="15sp" />

<EditText
    Android:id="@+id/Text1"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:ems="10"
    Android:hint="Title"
    Android:singleLine="true" >

    <requestFocus />

</EditText>

<TextView
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Content"
    Android:layout_marginTop="50dp"
    Android:textColor="#3bb9ff"
    Android:textSize="15sp"
   />


<EditText
    Android:id="@+id/newTodoText"
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent" 
    Android:minLines="2"
    Android:maxLines="7"
     Android:hint="Write something"
     Android:scrollbars = "vertical" >
</EditText>
<Button
    Android:id="@+id/Add"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="center"
    Android:text="Add" />


</LinearLayout>
</ScrollView>

EditText с идентификатором "newTodoText" здесь под вопросом. 

39
Naddy

Вы должны просто заменить свой <ScrollView ></ScrollView> на этот Custom ScrollView, как <com.example.VerticalScrollview > </com.example.VerticalScrollview >

package com.example;

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

public class VerticalScrollview extends ScrollView{

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

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

        public VerticalScrollview(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:
                    Log.i("VerticalScrollview", "onInterceptTouchEvent: DOWN super false" );
                    super.onTouchEvent(ev);
                    break;

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

            case MotionEvent.ACTION_CANCEL:
                    Log.i("VerticalScrollview", "onInterceptTouchEvent: CANCEL super false" );
                    super.onTouchEvent(ev);
                    break;

            case MotionEvent.ACTION_UP:
                    Log.i("VerticalScrollview", "onInterceptTouchEvent: UP super false" );
                    return false;

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

        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        super.onTouchEvent(ev);
        Log.i("VerticalScrollview", "onTouchEvent. action: " + ev.getAction() );
         return true;
    }
}
33
Sandeep
EditText EtOne = (EditText) findViewById(R.id.EditText01);
EtOne.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (v.getId() == R.id.EditText01) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_UP:
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }
        }
        return false;
    }
});
84
Amsheer
mEdtText1.setOnTouchListener(new View.OnTouchListener() { 
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                mScrlMain.requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });

// меняем значение mEdtText1 с помощью вашего редактируемого текстового объекта, а также меняем mScrlMain с помощью объекта прокрутки, они работают точно.

15
Dhaval Solanki
<ScrollView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" >

Это сделает весь макет прокручиваемым.

Для настройки прокручиваемого текста редактирования добавьте Android:scrollbars="vertical" к вашему edittext

В вашем коде это уже написано

<EditText
    Android:id="@+id/newTodoText"
    Android:layout_width="fill_parent"
    Android:layout_height="match_parent" 
    Android:minLines="2"
    Android:maxLines="7"
     Android:hint="Write something"
     Android:scrollbars = "vertical" >

Удалить из кода. Он будет работать нормально

4
anjaly

вы должны использовать класс NestedScrollView. Этот класс поддерживает дочернюю прокрутку внутри родительской прокрутки. Этот класс может быть дочерним или родительским.

<Android.support.v4.widget.NestedScrollView         
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:background="#d6d8d9">
    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:orientation="horizontal">
        <TextView
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:maxLines="512"
                Android:text=" your content"/>
        <Android.support.v4.widget.NestedScrollView
            Android:layout_below="@id/ll_button"
            Android:layout_width="match_parent"
            Android:layout_height="300dp"
            Android:background="#d6d8d9">

            <EditText
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content" 
                Android:text="your content"
                Android:maxLines="512"/>    
        </Android.support.v4.widget.NestedScrollView>       
    </LinearLayout>

</Android.support.v4.widget.NestedScrollView> 
2
HungNM2
noteEdit.setMovementMethod(new ScrollingMovementMethod());
    ScrollingMovementMethod.getInstance();


    noteEdit.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            noteEdit.getParent().requestDisallowInterceptTouchEvent(true);

            return false;
        }


    });
1
Kamlesh Dingalwar

Простой способ сделать это упоминается ниже с некоторым описанием

            myEditText.setOnTouchListener(new View.OnTouchListener() {  //Register a callback to be invoked when a touch event is sent to this view.
            @Override
            public boolean onTouch(View v, MotionEvent event) {     
//Called when a touch event is dispatched to a view. This allows listeners to get a chance to respond before the target view.
                mScrollView.requestDisallowInterceptTouchEvent(true);
                return false;
            }
        });
1
Summved Jain

Используйте этот код его работы

в Xml

Android:singleLine="false"
Android:overScrollMode="always"
Android:scrollbarStyle="insideInset"
Android:scrollbars="vertical"

в Pragraming

et_feedback.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View view, MotionEvent event) {

                if (view.getId() == R.id.et_feedback) {
                    view.getParent().requestDisallowInterceptTouchEvent(true);
                    switch (event.getAction() & MotionEvent.ACTION_MASK) {
                        case MotionEvent.ACTION_UP:
                            view.getParent().requestDisallowInterceptTouchEvent(false);
                            break;
                    }
                }
                return false;
            }
        });
0
Keshav Gera
  • Вы установили ScrollView как макет вашего родителя. Это причина Весь ваш макет прокручивается.
  • Что касается вашего EditText, вы использовали Android:scrollbars = "vertical", что означает если EditText Растет появится вертикальная полоса прокрутки. Вы получите полосу прокрутки и эффект прокрутки , Только если у edittext достаточно данных.

Надеюсь это поможет...

0
CRUSADER