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? Misurare l'altezza del contenitore degli errori TextInputLayout
risposta
Quindi ci sono due possibilità per farlo:
- Set
errorEnabled
come false e creare personalizzatoTextView
con testo di errore. - Aggiungi extra invisibile
TextView
in fondo alla seconda vista con lo stile e la dimensione del carattere che possono essere trovati nel costruttoreTextInputLayout
. Non sto usando questo metodo, ma nel mio caso è 12sp.
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
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