wake-up-neo.com

Android Spinner mit Unterstreichung AppCompat

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.

45
Pritam Kadam

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"
125
Pritam Kadam

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_spinner_mtrl_am_alpha

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

enter image description here

Die erste Zeile ist meine benutzerdefinierte Unterstreichung, die zweite Zeile ist die Standardeinstellung Base.Widget.AppCompat.Spinner.Underlined

7
Ragaisis

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>
4
Keshav Gera

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" />
2
Annu