2015-03-22 16 views

Antwort

87

Aktualisieren Sie Ihre Support-Bibliothek und in XML verwenden

Bitte fügen Sie diesen Stil zu Ihrem Spinner

style="@style/Base.Widget.AppCompat.Spinner.Underlined" 
+7

Wie die unterstrichenen färben? – rohitsakala

+1

Kann der Dropdown-Pfeil entfernt und unterstrichen werden? Wenn ich einen Hintergrund einstelle, verschwindet die Unterstreichung. –

+0

Irgendwelche Lösungen zu oben? Wenn ich diesen Stil verwende, wird mein Pfeil durch den Standard ersetzt. – AndroidGuy

6

Dies ist Hacky (und nicht perfekt) Art und Weise Spinner zu ändern und unterstreichen Farbe in AppCompat Thema. Hauptpunkt, dass ich Android unterstütze Bibliothek Bilder und XML-Dateien, um die Farbe zu ändern.

1) gehen Bibliothekspaket und kopieren 2 Bilder (oder laden Sie meine Gewohnheit von der Unterseite dieses Beitrags)

/your-app/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.1.0/res/drawable-hdpi/abc_spinner_mtrl_am_alpha.9.png 

und

/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) Erstellen Sie eine Kopie dieser Bilder zu unterstützen

3) Farbe ändern von abc_spinner_mtrl_am_alpha.9.png (Warnung: lassen sie schwarze Ränder, wie sie sind, ist es für 9 Patch)

4) Farbe ändern der zweiten unteren Zeile abc_textfield_default_mtrl_alpha.9.png (Sie können unten in der beigefügten kleinen Bild sehen)

5) Speichern und Dateien zu einem Projekt bewegen Drawables

6) erstellen bottom_line_color.xml ziehbar:

<?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) erstellen 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. Ich konnte nicht denselben visuellen Stil wie der Standard-Spinner erreichen (visuelle Änderungen siehe unten). Wenn Sie dieses benutzerdefinierte Spinner-Thema verwenden, sollten Sie es in allen Projekten verwenden.

hinzufügen So auf Werte/styles.xml

<style name="My.Spinner.Style" parent="Base.Widget.AppCompat.Spinner.Underlined"> 
    <item name="android:background">@drawable/spinner_bottom_line</item> 
</style> 

Und es in Anwendung wie folgt aus:

 <Spinner 
      android:id="@+id/account_spinner" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      style="@style/My.Spinner.Style" 
      /> 

Wichtig: Sie sollten Spinner und Ort, um verschiedene Drawables Ordner ändern. Sie können die Größe in dem gleichen Pfad finden, wie ich oben gezeigt habe. Es gibt einige populäre Größen:

drawables-mdpi 20x26 

drawables-hdpi 29x38 

drawables-xhdpi 38x50 

drawables-xxhdpi 74x98 

Sie können meine individuelle Bilder von hier nehmen:

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

Spinner Beispiel ist (xxhdpi), Zeile ist mdpi (weil wir nicht verschiedene Zeilen in verschiedenen Zeichnungsordner benötigen, so können wir nur 1).

Visuelle Differenz (von android Vorschaufenster Studio xml) wird hier gezeigt:

enter image description here

erste Zeile ist Spinner meine benutzerdefinierte unterstrichen, die zweite ist Base.Widget.AppCompat.Spinner.Underlined Standard

+0

mein Freund Ihre Methode könnte korrekt sein, aber wenn Android selbst bietet eine einzige Zeile, mit der Sie dies erreichen können, warum so viel von harter Arbeit zu tun? –

+2

Ich habe den Weg nicht gefunden, um die Spinnerunterstreichungsfarbe zu ändern. Wenn ich den Hintergrund in styles.xml geändert habe, ist das Spinner-Element verschwunden. So hilft mir diese Lösung, die Grundfarbe zu ändern und Spinner Artikel – Ragaisis

+0

Eine interessante Lösung zu verlassen. Ich fand es einfacher, eine Bildansicht (mit meiner Linie) unter meinem Spinner zu platzieren. – 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> 

====================== ==

im 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> 

================================= ==============

edit_text_bottom_border.xml Datei 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>