web-dev-qa-db-fra.com

EditText non-scrollable dans ScrollView

J'ai une ScrollView à l'intérieur de laquelle se trouve une EditText qui est configurée pour faire défiler verticalement. Mais ça ne défile pas. Au lieu de cela, toute la présentation défile, chaque fois que j’essaie de faire défiler la 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>

Le EditText avec l'id "newTodoText" est en question ici. 

39
Naddy

Vous devez simplement remplacer votre <ScrollView ></ScrollView> par ce ScrollView personnalisé comme <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;
            }
        });

// change entendez mEdtText1 avec votre objet texte d'édition et changez également mScrlMain avec votre objet de vue de défilement, ils fonctionnent parfaitement.

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

Cela fera défiler toute votre mise en page.

Pour configurer votre edittext scrollable, ajoutez Android:scrollbars="vertical" à votre edittext

Dans votre code c'est déjà écrit

<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" >

Supprimer le code.Il fonctionnera bien

4
anjaly

vous devriez utiliser la classe NestedScrollView. Cette classe prend en charge le défilement enfant dans le défilement parent. Cette classe peut être un enfant ou un parent.

<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

Un moyen simple de le faire est mentionné ci-dessous avec une description

            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

Utilisez ce code Son fonctionnement

en xml

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

en 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
  • Vous avez défini ScrollView comme disposition la plus parent. C'est la raison Toute votre mise en page est défilée.
  • En ce qui concerne votre EditText, vous avez utilisé Android:scrollbars = "vertical" qui signifie si le EditText Grandit un barre verticale srollBar apparaîtra. Vous obtiendrez la barre de défilement et l’effet de défilement Uniquement si edittext a des données suffisamment hautes.

J'espère que cela t'aides...

0
CRUSADER