2016-02-25 17 views
12

Ciao Devo fare il layout come sotto, il testo deve essere in TextInputLayout per avere la funzionalità di suggerimento errore e fluttuante, e lo spinner sulla destra deve avere sottolineato. La mia domanda è come farlo, perché quando sto aggiungendo EditText in TextInputLayout c'è un soffietto di imbottitura e entrambe le sottolineature non sono nella stessa riga. È possibile misurare in qualche modo questa altezza del contenitore degli errori? enter image description hereMisurare l'altezza del contenitore degli errori TextInputLayout

risposta

4

Quindi ci sono due possibilità per farlo:

  1. Set errorEnabled come false e creare personalizzato TextView con testo di errore.
  2. Aggiungi extra invisibile TextView in fondo alla seconda vista con lo stile e la dimensione del carattere che possono essere trovati nel costruttore TextInputLayout. Non sto usando questo metodo, ma nel mio caso è 12sp.
+0

Un'altra nota per il secondo punto, 'TextInputLayout' aggiunge il riempimento alla parte inferiore del contenitore degli errori se c'è il riempimento inferiore in' EditText'. Quindi devi aggiungerlo al tuo segnaposto 'TextView'. – ono

4

Questo è un problema comune e uno che ho avuto a che fare con me stesso proprio l'altro giorno. Puoi sempre dare un'occhiata alle misurazioni sullo guidelines here invece di dover esaminare il codice.

Per quanto riguarda fare una partita filatore si può iniziare con l'aggiunta di uno sfondo come questo drawable

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:top="-1dp" 
     android:left="-1dp" 
     android:right="-1dp" 
     android:bottom="1dp" > 
     <shape android:shape="rectangle"> 
      <padding android:top="4dp" android:bottom="4dp" /> 
      <stroke android:width="1dp" android:color="@color/my_grey"/> 
     </shape> 
    </item> 
</layer-list> 

Probabilmente si vorrà aggiungere android:padding="0dp" al Spinner e invece di usare uno dei th simple_... layout che aggiungono imbottitura che non corrisponde EditText, restituisce un TextView pianura come visualizzazione restituito dalla scheda, ma continuare a utilizzare il layout simple_... per la vista a discesa, come nell'esempio qui sotto adattatore

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     //convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false); 
     convertView = new TextView(parent.getContext()); 
    } 
    //if you want to mimick the floating hint behaviour from the edit text,  
    //you can animate the label visibility here 
    return populateView(position, convertView, parent); 
} 

private View populateView(int position, View convertView, ViewGroup parent) { 
    // in here set your values as you usually would 
    return convertView; 
} 

@Override 
public View getDropDownView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.support_simple_spinner_dropdown_item, parent, false); 
    } 
    return populateView(position, convertView, parent); 
} 

Ora forniti i margini sulla corrispondenza EditText e Spinner, si allineeranno. Anche se in alcuni layout devo impostare android:layout_marginTop="0dp" su Spinner

Problemi correlati