33

Ho un ScrollView all'interno del quale è un EditText che è impostato per scorrere verticalmente. Ma non scorre. Invece l'intero layout scorre, ogni volta che provo a scorrere il EditText. Di seguito è il codice -EditText non scorrevole all'interno di ScrollView

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

L'EditText con id "newTodoText" è in questione qui.

+0

possibile duplicato del [editbox scorrimento all'interno ScrollView] (http://stackoverflow.com/questions/9770252/scrolling-editbox-inside-scrollview) – Elltz

risposta

28

È necessario sostituire solo il tuo <ScrollView ></ScrollView> con questo ScrollView personalizzato come <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; 
    } 
} 
+0

Funziona se il testo di modifica è all'interno di una vista di scorrimento. Grazie ... –

+0

Risposta fantastica – vnshetty

+0

Fantastico ..... Grazie mille ... – ydnas

0
  • Hai impostato ScrollView come layout principale per i genitori. Questo è il motivo per far scorrere l'intero layout.
  • Per quanto, riguarda il tuo EditText è interessato, si è utilizzato android:scrollbars = "vertical" il che significa che se il EditText cresce apparirà uno srollBar verticale. Si otterrà la barra di scorrimento e lo scorrimento effetto solo se EditText ha dati abbastanza alto ..

Spero che questo aiuti ...

+0

Anche se i dati sono sufficientemente elevata, la EditText non è scorrevole. come posso farlo scorrere? – Naddy

3
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

Ciò renderà scorrevole l'intero layout.

Per impostare l'EditText scorrevole aggiuntivo android:scrollbars="vertical" al EditText

Nel codice sua già scritto

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

Rimuovi il da code.It funzionerà bene

-2

È stato impostato " Scorri vista "per il tuo genitore - questo significa che scorre l'intero layout.

Se si desidera scorrere un particolare "Modifica testo", è necessario inserire un'altra vista di scorrimento in quel testo di modifica.

+2

ti sei dimenticato di collegare. – Jakob

73
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; 
    } 
}); 
+9

questa risposta dovrebbe essere accettata, fantastico uomo :) – Antarix

+4

Sì, davvero .. Questo codice ha funzionato .. Semplice e semplice ... Impressionante Amsheer ... Grazie fantastico – John

+0

Risposta di prim'ordine ma una domanda, è possibile registrare solo questo tocco intercettazione (scorre il testo di modifica) quando c'è abbastanza contenuto nel testo di modifica per poterlo scorrere? –

11
mEdtText1.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       mScrlMain.requestDisallowInterceptTouchEvent(true); 
       return false; 
      } 
     }); 

// cambiamento sentire mEdtText1 con la modifica dell'oggetto di testo e modificare anche mScrlMain con il vostro oggetto vista di scorrimento funzionano sicuramente.

+1

Questo ha funzionato alla grande per me. Non sono riuscito a far funzionare Amsheer. Grazie! – moberme

+0

Questa è la risposta giusta. – Shirane85

+0

funziona in modo semplice e preciso. Grazie :) – iroiroys

1
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

si dovrebbe usare la classe NestedScrollView. Questa classe supporta lo scorrimento del bambino all'interno dello scorrimento genitore. Questa classe può essere un bambino o un genitore.

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

Un modo semplice per farlo è di seguito indicate con qualche descrizione

  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; 
      } 
     }); 
0

utilizzare questo codice il suo funzionamento

in Xml

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

in 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; 
      } 
     }); 
Problemi correlati