2015-03-22 21 views
33

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

87

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" 
+7

come colorare la sottolineatura? – rohitsakala

+1

Un modo per rimuovere la freccia a discesa e averla sottolineata? se imposto uno sfondo, la sottolineatura scompare. –

+0

Qualche soluzione a sopra? Se utilizzo questo stile, la mia freccia viene sostituita da quella predefinita. – AndroidGuy

6

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_spinner_mtrl_am_alpha

my_custom_abc_textfield_default_mtrl_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:

enter image description here

prima linea è la mia sottolineatura personalizzato filatore, secondo è di default Base.Widget.AppCompat.Spinner.Underlined

+0

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? –

+2

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

+0

Una soluzione interessante. Ho trovato più facile posizionare un imageview (con la mia linea) sotto il mio spinner. – Yar

1

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> 
Problemi correlati