2014-06-26 9 views
21

Ho una scrollview all'interno della quale è presente un editext che è multiline. Voglio scorrere l'edittext per vedere il contenuto più basso, ma non può essere fatto.Come scorrere l'edittext all'interno della scrollview

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:background="@android:color/holo_blue_light" 
     android:gravity="center" > 
     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="View Complaint" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 
    </LinearLayout> 
    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" > 
     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="vertical" 
      android:padding="20dp" > 
      <TextView 
       android:id="@+id/textView2" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="15dp" 
       android:text="Order Number 0100C1" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <TextView 
       android:id="@+id/textView3" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:text="Name of ClientClient 1" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <TextView 
       android:id="@+id/textView4" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="5dp" 
       android:text="Subject : Measurement Issues" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <TextView 
       android:id="@+id/textView5" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="25dp" 
       android:text="Description" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <TextView 
       android:id="@+id/textView6" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="15dp" 
       android:text="Lorem ipsum dolor sit amet, sapien etiam, nunc amet dolor ac odio mauris justo. Luctus arcu, urna praesent at id quisque ac. Arcu massa vestibulum malesuada, integer vivamus el/ eu " 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" > 
       <TextView 
        android:id="@+id/textView7" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="2dp" 
        android:text="Assign to" 
        android:textAppearance="?android:attr/textAppearanceMedium" /> 
       <Spinner 
        android:id="@+id/spinner1" 
        android:layout_width="match_parent" 
        android:layout_height="40dp" 
        android:entries="@array/array_name" /> 
      </LinearLayout> 
      <EditText 
       android:id="@+id/editText1" 
       android:layout_width="match_parent" 
       android:layout_height="200dp" 
       android:layout_marginTop="15dp" 
       android:background="#eeeeee" 
       android:inputType="textMultiLine" 
       android:singleLine="false" 
       android:text="Android applications normally run entirely on a single thread by    default the “UI thread” or the “main thread”. 

      android:textAppearance="?android:attr/textAppearanceMedium" ></EditText> 
      <TextView 
       android:id="@+id/textView5" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="20dp" 
       android:text="Comment History" 
       android:textAppearance="?android:attr/textAppearanceMedium" /> 
      <ImageView 
       android:id="@+id/imageView1" 
       android:layout_width="fill_parent" 
       android:layout_height="147dp" 
       android:src="@drawable/adddd" /> 
      <CheckBox 
       android:id="@+id/checkBox1" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp" 
       android:text="Close Complaints" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 
      <Button 
       android:id="@+id/login" 
       style="?android:attr/buttonStyleSmall" 
       android:layout_width="match_parent" 
       android:layout_height="45dp" 
       android:layout_below="@+id/ll" 
       android:layout_marginLeft="20dp" 
       android:layout_marginRight="20dp" 
       android:layout_marginTop="15dp" 
       android:background="@drawable/login_btn" 
       android:text="Submit" 
       android:textColor="@android:color/holo_blue_dark" 
       android:textSize="25dp" 
       android:textStyle="bold" /> 
     </LinearLayout> 
    </ScrollView> 
</LinearLayout> 

enter image description here

si può ragazzi mi aiuterà in questo. Penso che editText ottenga lo stato attivo quando il cursore è all'interno di esso.

Grazie .. !!!!!

+1

Questo è un problema strutturale avere un EditText scorrevole all'interno di ScrollView. Dal momento che hai la ScrollView, permetti a EditText di crescere in altezza secondo le tue necessità .. nessuna barra di scorrimento di EditText richiesta. Questo mi ricorda le pagine Web frustranti che hanno un iFrame a scorrimento più alto della finestra del browser. Spero che tu abbia trovato una soluzione che funzioni per te. –

risposta

22

Prova questo ..

Aggiungere di seguito le linee nella vostra EditText

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

Esempio

<EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="200dp" 
     android:layout_marginTop="15dp" 
     android:background="#eeeeee" 
     android:inputType="textMultiLine" 
     android:singleLine="false" 
     android:overScrollMode="always" 
     android:scrollbarStyle="insideInset" 
     android:scrollbars="vertical" 
     android:text="Android applications normally run entirely on a single thread by    default the “UI thread” or the “main thread”. 
     android:textAppearance="?android:attr/textAppearanceMedium" > 
    </EditText> 

EDIT

Programmatico LY

youredittext.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 

      v.getParent().requestDisallowInterceptTouchEvent(true); 
      switch (event.getAction() & MotionEvent.ACTION_MASK){ 
      case MotionEvent.ACTION_UP: 
        v.getParent().requestDisallowInterceptTouchEvent(false); 
        return true; 
      } 
      return false; 
     } 
}); 
+0

Fammi provare questo .... Grazie – Gattsu

+3

Ancora non funziona :( – Gattsu

+0

@Manish Vedi la mia modifica Programmaticamente prova questo. – Hariharan

41

Prima aggiungere questo in XML

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

quindi aggiungere lo stesso di cui sopra "OnTouch", ma fanno tornare "false" non "vero"

public boolean onTouch(View view, MotionEvent event) { 

        if (view.getId() == R.id.DwEdit) { 
         view.getParent().requestDisallowInterceptTouchEvent(true); 
         switch (event.getAction()&MotionEvent.ACTION_MASK){ 
         case MotionEvent.ACTION_UP: 
          view.getParent().requestDisallowInterceptTouchEvent(false); 
          break; 
         } 
        } 
        return false; 
} 
+4

quando premi invio da tastiera mentre scrivi Si sta scorrendo padre scrollview –

+1

La risposta corretta –

+0

È corretto, è utile per me –

1

voterei up la risposta aggiornata fornita da @Ayman Mahgoub, ma non ho una reputazione sufficientemente alta. Il suo codice funziona. Ho dovuto cambiare il rendimento true per restituire false. Hai messo il metodo .setOnTouchListener() nella classe Java e mettere le tre linee:

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

nel file XML corrispondente. Puoi vedere l'implementazione nell'emulatore Android e sul telefono Android che utilizzi per i test. Grazie mille @Ayman Mahgoub e @Hariharan!

3

Basandosi sulla risposta di @Ayman Mahgoub e @Hariharan. La soluzione ha funzionato benissimo tranne che durante lo scorrimento del testo di modifica non c'è stato lo scorrimento. Non appena il dito si solleva, lo scorrimento si interrompe immediatamente.

Per ottenere lo scorrimento, avvolgere una vista a scorrimento intorno a Modifica testo e lasciare che il contenuto di avvolgimento dell'altezza di EditText (imposta l'altezza minima se lo si desidera). Rimuovere le seguenti righe dalla modifica del testo:

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

Ora lo ScrollView nidificato avvolto intorno al EditText si occupa dello scorrimento. Aggiornare il gestore onTouch di prendere in considerazione la gerarchia vista aggiornata:

public boolean onTouch(View view, MotionEvent event) { 
    v.getParent().getParent().requestDisallowInterceptTouchEvent(true); 
    switch (event.getAction() & MotionEvent.ACTION_MASK){ 
     case MotionEvent.ACTION_UP: 
      v.getParent().getParent().requestDisallowInterceptTouchEvent(false); 
      break; 
    } 
    return false; 

essere avvertito, questa soluzione è ormai strettamente legato alla gerarchia della vista.

Gist: https://gist.github.com/atoennis/7549fba2634d0abccddf

+0

La mia risposta sopra è datata. @ HungNM2 ha la risposta più moderna e corretta. – Adam

+0

Ho un 'ScrollView' che contiene diverse viste, e solo uno di loro è un' EditText'. Questa soluzione presuppone solo un 'EditText' all'interno di' ScrollView'? O aggiungendo un 'ScrollView' in più solo per racchiudere' EditText'? –

+0

Ha funzionato per me! Grazie! –

3

si dovrebbe utilizzare 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

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

Questo wi ll scorrere la EditText e renderlo modificabile:

primo nel file XML, aggiungere questo:

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

Poi nel file Java, aggiungere questo:

EditText.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      view.getParent().requestDisallowInterceptTouchEvent(true); 
      switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) { 
       case MotionEvent.ACTION_SCROLL: 
        view.getParent().requestDisallowInterceptTouchEvent(false); 
        return true; 
       case MotionEvent.ACTION_BUTTON_PRESS: 
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        imm.showSoftInput(EditText, InputMethodManager.SHOW_IMPLICIT); 
      } 
      return false; 
     } 
});