wake-up-neo.com

Ändere die Farbe des kleinen Dreiecks auf dem Spinner in android

enter image description here

Wie kann ich die Farbe des kleinen Dreiecks in der unteren rechten Ecke des Drehfelds ändern, wie im Bild gezeigt? Derzeit wird die Standardfarbe Grau angezeigt. so was

enter image description here

49
Yawar

Um die richtigen Bilder zu erhalten, rufen Sie die Seite Android Asset Studio auf und wählen Sie Android Holo Colors Generator . Dadurch werden alle Elemente erstellt, die Sie möglicherweise benötigen, einschließlich des "Dreiecks". Es werden auch die XML-Dateien generiert, die die Änderungen implementieren.


Hier sind die XML-Beispieldateien:

Freiwählbare Farbe:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="apptheme_color">#33b5e5</color>
</resources>

Benutzerdefinierter Spinner-Stil:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="SpinnerAppTheme" parent="Android:Widget.Spinner">
      <item name="Android:background">@drawable/apptheme_spinner_background_holo_light</item>
      <item name="Android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
  </style>

  <style name="SpinnerDropDownItemAppTheme" parent="Android:Widget.DropDownItem.Spinner">
      <item name="Android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
  </style>
</resources>

Benutzerdefiniertes Anwendungsthema:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="AppTheme" parent="@style/_AppTheme"/>

  <style name="_AppTheme" parent="Theme.AppCompat.Light">

    <item name="Android:spinnerStyle">@style/SpinnerAppTheme</item>

    <item name="Android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemAppTheme</item>

  </style>

</resources>

Wie Sie sehen, gibt es auch viele Zeichenobjekte, auf die diese Stile verweisen.

Hier ist das spezifische "Dreieck", das Sie ändern möchten:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.Apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_enabled="false"
          Android:drawable="@drawable/apptheme_spinner_disabled_holo_light" />
    <item Android:state_pressed="true"
          Android:drawable="@drawable/apptheme_spinner_pressed_holo_light" />
    <item Android:state_pressed="false" Android:state_focused="true"
          Android:drawable="@drawable/apptheme_spinner_focused_holo_light" />
    <item Android:drawable="@drawable/apptheme_spinner_default_holo_light" />
</selector>

Ich denke nicht, dass dies der richtige Ort ist, um jede Datei vollständig aufzulisten, da Sie sie alle direkt aus dem Tool erhalten, auf das verwiesen wird.


Hinweis: Auf diese Weise können Sie Ihre gesamte App thematisieren, sodass alle Spinner auf den benutzerdefinierten Stil aktualisiert werden.

Wenn Sie auf der Suche nach einer schnellen und schmutzigen Möglichkeit sind, nur einen Spinner zu wechseln, lesen Sie den Artikel, auf den Ricky in seinem Kommentar verweist:

Ich empfehle es trotzdem zu lesen, da es den Prozess sehr gut erklärt und Ihnen hilft, den Rest meiner Antwort zu verstehen.

18

Die beste und einfachste Lösung:

spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

Andere Lösung (Danke an Simon), wenn Sie nicht alle Spinner ändern möchten:

Drawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable();

spinnerDrawable.setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

if (Android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    spinner.setBackground(spinnerDrawable);
}else{
    spinner.setBackgroundDrawable(spinnerDrawable);
}
80
toni

Ab Lollipop können Sie den Hintergrundfarbton auf xml einstellen.

Android:backgroundTint="@color/my_color"
37
Luis

Ich bin noch sehr neu in der Entwicklung von Android), also nimm meinen Rat vielleicht mit ein bisschen Salz, aber keine der Antworten hier schien sich auf die Spinner-Implementierung zu beziehen, die ich verwendet habe.

Was ich gesucht habe

Android:backgroundTint="@color/colorPrimary"

Hier ist der gesamte <Spinner> Etikett:

        <Spinner
            Android:id="@+id/coin_selector"
            Android:layout_width="wrap_content"
            Android:layout_height="21dp"
            Android:layout_margin="26dp"
            Android:layout_weight="1"
            Android:textColor="#FFFFFF"
            Android:dropDownSelector="@color/colorAccent"
            Android:backgroundTint="@color/colorPrimary"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            tools:layout_editor_absoluteY="89dp"/>

Blue triangle

10
jessems

Mach einfach so. Dies hilft Ihnen, Ihr Problem zu lösen.

<RelativeLayout 
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:background="spinner background image">

        <Spinner       
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"        
        Android:background="@null"/>

        <ImageView 
         Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:src="arrow image" />

    </RelativeLayout>

oder

Ich habe mir gerade die Antwort angesehen, die ich für eine andere Frage gegeben habe: Custom Spinner

5
RIJO RV

Wenn Sie minSdkVersion 21 haben, ist es sehr einfach:

<Spinner
style="@style/Widget.AppCompat.DropDownItem.Spinner"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:backgroundTint="@color/triangleColor" />

wo triangleColor ist deine Farbe.

Hier ist eine andere Möglichkeit, dies auch programmgesteuert zu lösen. (Getestet mit API 19 und höher).

Verwenden Sie dazu ViewCompat.

ViewCompat.setBackgroundTintList(spinner, ColorStateList.valueOf(your_color));

Benutzung von spinner.setSupportBackgroundTintList wirft einen Fehler

4
sud007

Die Lösung für die minimale SDK-Version 14. Sie können AppCompatSpinner aus der Support-Bibliothek verwenden:

AppCompatSpinner spinner = (AppCompatSpinner) view.findViewById(R.id.my_spinner);
spinner.setSupportBackgroundTintList(ContextCompat.getColorStateList(context, R.color.my_color));
3
vmayatskii