Ich verwende ein AppCompat-Design für meine Anwendung. Müssen Sie wissen, wie ich dem Spinner unterstreichen kann. Es zeigt nur den Anker. Ich habe versucht, die Unterstreichung mit Android: background einzurichten, aber dadurch verschwindet der Anker.
Aktualisieren Sie Ihre Support-Bibliothek und verwenden Sie sie in XML
Bitte fügen Sie diesen Stil Ihrem Spinner hinzu
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
Dies ist eine hackige (und nicht perfekte) Methode, um die Farbe von Drehfeldern und Unterstreichungen im AppCompat-Design zu ändern. Hauptpunkt, den ich angepasst habe Android Unterstützung Bibliothek Bilder und XML-Dateien, um die Farbe zu ändern.
1) gehe zum Support Library Package und kopiere 2 Bilder (oder lade mein Custom vom Ende dieses Beitrags herunter)
/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) Machen Sie eine Kopie dieser Bilder
3) Ändere die Farbe von abc_spinner_mtrl_am_alpha.9.png
4) Ändere die Farbe der zweiten untersten Zeile von abc_textfield_default_mtrl_alpha.9.png (siehst du im angehängten kleinen Bild unten)
5) Speichern und verschieben Sie Dateien in Ihre Projektzeichnungen
6) Erstellen Sie 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) Erstellen Sie 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 den gleichen visuellen Stil erzielen wie der Standard-Spinner (siehe Abbildung unten). Wenn Sie dieses benutzerdefinierte Spinner-Design verwenden, sollten Sie es in allen Projekten verwenden.
Fügen Sie also values / styles.xml hinzu
<style name="My.Spinner.Style" parent="Base.Widget.AppCompat.Spinner.Underlined">
<item name="Android:background">@drawable/spinner_bottom_line</item>
</style>
Und verwenden Sie es in der Anwendung wie folgt:
<Spinner
Android:id="@+id/account_spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
style="@style/My.Spinner.Style"
/>
Wichtig: Sie sollten die Größe des Drehfelds ändern und es in verschiedenen Ordnern für Zeichnungsobjekte ablegen. Sie finden die Größe auf demselben Pfad wie oben gezeigt. Es gibt einige beliebte Größen:
drawables-mdpi 20x26
drawables-hdpi 29x38
drawables-xhdpi 38x50
drawables-xxhdpi 74x98
Sie können meine benutzerdefinierten Bilder von hier nehmen:
my_custom_abc_spinner_mtrl_am_alpha:
my_custom_abc_textfield_default_mtrl_alpha:
Beispiel für Spinner ist (xxhdpi), Zeile ist mdpi (da wir keine verschiedenen Zeilen in verschiedenen Zeichenordnern benötigen, können wir also nur 1 haben).
Der visuelle Unterschied (vom Android Studio-XML-Vorschaufenster)) wird hier angezeigt:
Die erste Zeile ist meine benutzerdefinierte Unterstreichung, die zweite Zeile ist die Standardeinstellung Base.Widget.AppCompat.Spinner.Underlined
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>
=======================
<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>
=============================================
<?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>
Bewirbt sich style="@style/Base.Widget.AppCompat.Spinner.Underlined"
zeigte keinen Unterschied. Dann gab Android:backgroundTint
und Android:backgroundTintMode
Spinner und es hat funktioniert.
<Spinner
Android:id="@+id/spBookingType"
Android:spinnerMode="dropdown"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
style="@style/Base.Widget.AppCompat.Spinner.Underlined"
Android:backgroundTint="#ff000000"
Android:backgroundTintMode="src_in" />