14

Sto utilizzando TextInputLayout con la libreria di supporto di progettazione 22.2.1.L'animazione TextInputLayout si sovrappone al testo quando il testo è impostato a livello di programmazione

Imposta il valore di EditText a livello di codice e, quando viene visualizzata la schermata, è possibile notare che il suggerimento di TextInputLayout si sovrappone al testo all'interno, prima di spostarsi nella posizione mobile.

Ecco un layout semplice:

<android.support.design.widget.TextInputLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:hint="hint1" /> 

    </android.support.design.widget.TextInputLayout> 

Nel mio Activity:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

     EditText e1 = (EditText) findViewById(R.id.editText1); 
     e1.setText("TEXT TEST 1"); 
    } 

Qualcuno sa una soluzione?

enter image description here

risposta

17

Attualmente l'unico modo per evitare questo comportamento è quello di aggiungere il EditText di programmazione.

  1. Creare un TextInputLayoutsenza il EditText. Programmaticamente o tramite l'inflazione XML - non importa, ma deve essere vuoto.
  2. Crea il EditText e imposta il testo in base alle tue esigenze.
  3. Aggiungere EditTExt allo TextInputLayout.

Ecco un esempio:

TextInputLayout til = (TextInputLayout) findViewById(R.id.til); 
til.setHint(R.string.hint); 

EditText et = new EditText(getContext()); 
et.setText(value); 

til.addView(et); 

AGGIORNATO CON 21/08/2015 Design Library V23:

Con il supporto Design Library V23è possibile disattivare l'animazione:

Basta usare il setHintAnimationEnabled method:

textInputLayout.setHintAnimationEnabled(boolean) 

Qui il numero su Google Tracker.

+1

Molto utile, grazie. Sei a conoscenza di un metodo in grado di far funzionare il suggerimento senza utilizzare match_parent negli attributi width? In modo che la larghezza del campo corrisponda alla dimensione suggerimento se vuota e non focalizzata – milez

+0

grazie per l'aggiornamento – drod

+0

@Gabriele Mariotti fa textInputLayout.setHintAnimationEnabled (booleano) funziona in v25 ?? – KJEjava48

3

Ho riscontrato di recente questo problema durante l'utilizzo di DialogFragment. Per risolvere, basta disabilitare l'animazione del suggerimento se si ha un valore nel campo prima del si imposta il valore del campo. L'ordine è importante

Per esempio,

TextInputLayout layout = (TextInputLayout) findViewById(R.id.text_layout); 
TextInputEditText edit = (TextInputEditText) findViewById(R.id.text_edit); 

String fieldValue = "Something"; 

layout.setHintAnimationEnabled(fieldValue == null); 
edit.setText(fieldValue); 

In questo modo il layout non avvia l'animazione quando il testo è impostato. Puoi anche guardare le modifiche del testo e riattivarlo quando il campo è vuoto.