Sto utilizzando un tema appcompat per la mia applicazione. Ho bisogno di sapere come posso mostrare la sottolineatura allo spinner. Sta solo mostrando l'ancora. Ho provato a impostare underline usando android: background ma fa sparire l'ancora.Spinner Android con sottolineatura appcompat
risposta
aggiornare la libreria di supporto e in XML utilizzano
Si prega di aggiungere questo stile al vostro Spinner
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
Questo è hacky (e non perfetto) modo per cambiare filatore e sottolineare il colore in appcompat tema. Punto principale che ho personalizzato le immagini della libreria di supporto Android e i file xml per cambiare colore.
1) andare a sostenere il pacchetto biblioteca e copiare 2 immagini (o scaricare il mio personalizzato dal fondo a questo post)
/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_spinner_mtrl_am_alpha.9.png
e
/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_textfield_default_mtrl_alpha.9.png
2) Creare una copia di quelle immagini
3) Cambia colore di abc_spinner_mtrl_am_alpha.9.png (avviso: lascia i bordi neri così come sono, è per 9 patch)
4) Cambiare il colore della seconda linea di fondo di abc_textfield_default_mtrl_alpha.9.png (si può vedere in allegato piccola immagine qui sotto)
5) Salvare e spostare i file al progetto drawable
6) Creare bottom_line_color.xml drawable:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-6dp" android:left="-6dp" android:right="-6dp">
<shape>
<stroke android:color="@color/brown" android:width="6dp"/>
</shape>
</item>
7) Creare spinner_bottom_line.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:insetLeft="@dimen/abc_control_inset_material"
android:insetTop="@dimen/abc_control_inset_material"
android:insetBottom="@dimen/abc_control_inset_material"
android:insetRight="@dimen/abc_control_inset_material">
<selector>
<item android:state_checked="false" android:state_pressed="false">
<layer-list>
<item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" />
<item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" />
</layer-list>
</item>
<item>
<layer-list>
<item android:drawable="@drawable/my_custom_abc_textfield_default_mtrl_alpha" />
<item android:drawable="@drawable/my_custom_abc_spinner_mtrl_am_alpha" />
</layer-list>
</item>
</selector>
</inset>
P.S. Non sono riuscito a ottenere lo stesso stile visivo dello spinner predefinito (le modifiche visive mostrate di seguito). Se inizi a utilizzare questo tema spinner personalizzato dovresti usarlo in tutto il progetto.
in modo da aggiungere ai valori/styles.xml
<style name="My.Spinner.Style" parent="Base.Widget.AppCompat.Spinner.Underlined">
<item name="android:background">@drawable/spinner_bottom_line</item>
</style>
e utilizzarlo in un'applicazione come questa:
<Spinner
android:id="@+id/account_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/My.Spinner.Style"
/>
Importante: Si dovrebbe ridimensionare filatore e luogo per varie cartelle drawable. Puoi trovare le dimensioni nello stesso percorso che ho mostrato sopra. Ci sono pochi formati popolari:
drawables-mdpi 20x26
drawables-hdpi 29x38
drawables-xhdpi 38x50
drawables-xxhdpi 74x98
potete prendere le mie immagini personalizzate da qui:
my_custom_abc_spinner_mtrl_am_alpha:
my_custom_abc_textfield_default_mtrl_alpha:
L'esempio di spinner è (xxhdpi), la linea è mdpi (perché non abbiamo bisogno di varie linee in varie cartelle disegnabili, quindi possiamo avere solo 1).
differenza visiva (dalla finestra di anteprima XML Studio Android) è mostrata qui:
prima linea è la mia sottolineatura personalizzato filatore, secondo è di default Base.Widget.AppCompat.Spinner.Underlined
il mio metodo amico potrebbe essere corretto, ma se Android fornisce una singola linea che consente di ottenere questo perché fare così tanto duro lavoro? –
Non ho trovato il modo di cambiare il colore della sottolineatura dello spinner. Se ho cambiato sfondo in styles.xml, l'oggetto spinner è scomparso. Quindi questa soluzione mi aiuta a cambiare il colore della linea di fondo e a lasciare il filatore – Ragaisis
Una soluzione interessante. Ho trovato più facile posizionare un imageview (con la mia linea) sotto il mio spinner. – Yar
in styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:spinnerStyle">@style/holoSpinner</item>
</style>
<style name="holoSpinner" parent="Widget.AppCompat.Spinner.Underlined">
<item name="android:textSize">16sp</item>
<item name="android:textColor">@color/colorPrimary</item>
</style>
====================== ==
in Layout
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<Spinner
android:id="@+id/spinCountry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/edit_text_bottom_border"
android:paddingBottom="10dp" />
</android.support.design.widget.TextInputLayout>
================================= ==============
file di edit_text_bottom_border.xml in Drawable
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:bottom="1dp"
android:left="-3dp"
android:right="-3dp"
android:top="-3dp">
<shape android:shape="rectangle">
<stroke
android:width="1dp"
android:color="#535353" />
<!--android:color="#535353" />-->
</shape>
</item>
</layer-list>
come colorare la sottolineatura? – rohitsakala
Un modo per rimuovere la freccia a discesa e averla sottolineata? se imposto uno sfondo, la sottolineatura scompare. –
Qualche soluzione a sopra? Se utilizzo questo stile, la mia freccia viene sostituita da quella predefinita. – AndroidGuy