it-swarm.com.de

Ändern Sie die Spinner-Hintergrundfarbe, aber behalten Sie den Pfeil bei

Ich habe einige Dinge darüber gelesen, aber ich kann nicht finden, was ich brauche ... Ich möchte den grauen Pfeil beibehalten, aber ich möchte den horizontalen Balken vom Standardstil entfernen und einen weißen Hintergrund haben. Hast du eine Idee, wie ich das machen kann?

Folgendes habe ich jetzt (Standard-Spinner-Stil):

enter image description here

Hier ist was ich will:

enter image description here

38
Mansur Khan

Für das Protokoll habe ich eine einfache Lösung gefunden: Wickeln Sie Ihren Spinner in ein relatives Layout und fügen Sie ein Bild hinzu:

 <RelativeLayout 
     Android:layout_width="fill_parent"
     Android:layout_height="wrap_content"
     Android:background="@drawable/borderbottom_white"<!-- white background with bottom border -->
     Android:layout_marginTop="15dp"  >
        <Spinner
        Android:id="@+id/postfield_category"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:textSize="16sp"
        Android:background="@null"
        Android:minHeight="0dp" />
        <ImageView 
         Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_alignParentRight="true"
        Android:src="@drawable/arrowspinner" />
    </RelativeLayout>
24
Mansur Khan

Ich habe eine kleine Modifikation vorgenommen, basierend auf der Antwort von @Mansur Khan.

In diesem Fall müssen Sie keine ImageView hinzufügen, da der Spinner bereits einen Dreieckspfeil hat. Überprüfen Sie also den folgenden Code:

    <RelativeLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:padding="8dp"
        Android:background="#FFFFFF">
        <Spinner
            style="@style/Widget.AppCompat.DropDownItem.Spinner"
            Android:layout_width="match_parent"
            Android:layout_height="70dp"
            Android:id="@+id/sign_up_country"
            />
    </RelativeLayout>

Hier ist der Screenshot

Vor:  enter image description here

Nach dem:  enter image description here

56
Chandler

Eine einfache Lösung, bei der Sie kein eigenes Zeichenelement für den Pfeil erstellen müssen, besteht darin, den Spinner mit einer RelativeLayout zu umwickeln und die Hintergrundfarbe in der RelativeLayout und nicht im Spinner festzulegen.

<RelativeLayout
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="#f00" >
    <Spinner
        Android:id="@+id/spinner1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />
</RelativeLayout>
20
Tad

Benutze das: 

yourspinner.setOnItemSelectedListener(this);
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    ((TextView) yourspinner.getSelectedView()).setBackgroundColor(getResources()
            .getColor(R.color.your_color));
}

und Ihre Klasse sollte OnItemSelectedListener implementieren.

4
Kishan

Hi, anstatt die Spinner-Komponente um übergeordnete Layouts wie LinearLayout, RelativeLayout usw. zu wickeln, wodurch das Layout-Parsing erhöht wird. Erstellen Sie einfach eine Zeichenfolge mit dem Namen spinner_bg.xml unter einem Zeichenordner. 

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item>
        <bitmap
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:gravity="right"
            Android:src="@drawable/icn_dropdown_arw" />
    </item>
</layer-list>

Setze spinner_bg als Hintergrund für deinen Spinner und es funktioniert wie ein Zauber:

<Spinner  
     Android:layout_width="match_parent"
     Android:layout_height="wrap_content"
     Android:padding="5dp"
     Android:background="@drawable/spinner_bg" />
2

Eine gute Möglichkeit, Spinner und andere Android-Steuerelemente anzupassen, ist die Verwendung der Android Asset Studio - Site und die Auswahl des Android Holo Colors Generator . Dadurch werden alle Assets erstellt, die Sie möglicherweise benötigen, einschließlich der "Unterstreichung". Es generiert auch die XML-Dateien, die die Änderungen implementieren.

Wenn Sie die ZIP-Datei von dieser Site heruntergeladen haben, kopieren Sie einfach die Bilder und XML-Dateien in Ihr Projekt.

Sie können dann die erforderlichen Bilddateien bearbeiten, um die Unterstreichung zu entfernen. Sie sind 9-Patch-Dateien mit dem Namen:

  • apptheme_spinner_default_holo_light.9.png
  • apptheme_spinner_disabled_holo_light.9.png
  • apptheme_spinner_focused_holo_light.9.png
  • apptheme_spinner_pressed_holo_light.9.png

Eine ausführlichere Erläuterung des Prozesses und einige Beispiele für XML-Dateien finden Sie in meiner zugehörigen Antwort:

1

unterhalb des Layouts wird in Spinner ein Hintergrund mit dem Dropdown-Pfeil für gewünschte Farben erstellt

  <LinearLayout
        Android:layout_width="0dp"
        Android:layout_height="match_parent"
        Android:layout_weight=".6"
        Android:background="@drawable/edit_text_rounded_shape"
        Android:gravity="center|center_vertical">
    <Spinner
        Android:id="@+id/spinerComanyName"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:padding="4dp"
        Android:layout_weight=".6"
        Android:layout_gravity="center"

        Android:entries="@array/spinner_item"
        Android:spinnerMode="dropdown"
        Android:theme="@style/Spinner"

        />
   </LinearLayout>

   <style name="Spinner">
    <!-- Used for the bottom line when not selected / focused -->
    <item name="colorControlNormal">@color/black</item>
    <item name="colorControlActivated">@color/colorPrimary</item>
    <!-- colorControlActivated & colorControlHighlight use the colorAccent          color by default -->
   </style>

edit_text_rounded_shape, die Hintergrundfarbe und abgerundete Ecken bieten

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

   <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:shape="rectangle" Android:padding="10dp">
         <solid Android:color="@color/white"/>
         <stroke Android:color="@color/grey"/>
     <corners
     Android:bottomRightRadius="15dp"
     Android:bottomLeftRadius="15dp"
     Android:topLeftRadius="15dp"
     Android:topRightRadius="15dp"/>
  </shape>
1
Sumit Kumar

Immer wenn ich mit Spinner, Buttons und EditTexts arbeite und auch ein Drawable einfügen muss, wickle ich oft das Element (Spinner, EditText usw.) in ein FrameLayout ein. Überprüfen Sie ein Beispiel:

<FrameLayout
                                Android:layout_width="match_parent"
                                Android:layout_height="wrap_content">

                                <Spinner
                                    Android:id="@+id/spinner_component"                                
                                    Android:layout_width="match_parent"
                                    Android:layout_height="45dp"
                                    Android:background="@drawable/your_rectangle_style"
                                    Android:textColor="@color/your_text_color" />

                                <ImageView
                                    Android:layout_width="11dp"
                                    Android:layout_height="9dp"
                                    Android:src="@drawable/arrow_spinner"
                                    Android:layout_gravity="right|center_vertical"
                                    Android:layout_marginRight="7dp" />
                            </FrameLayout>

Ein weiterer wichtiger Tipp ist, dass Sie mit FrameLayout beispielsweise OnClick-Funktionen für das Zeichenobjekt festlegen können.

0
Fellipe Tavares

       Android:layout_alignParentRight="true"
        Android:layout_width="@dimen/spinner_width"
        Android:layout_height="wrap_content"
        Android:id="@+id/spnLocation"
        Android:entries="@array/labelFamily"
        Android:layout_centerVertical="true"

        Android:backgroundTint="@color/color_gray"

diese Arbeit für mich

0
Muhammad Dawood

Ich denke, der beste Weg ohne komplexe Layouts ist dies:

Verwenden Sie diese XML-Datei für Ihren Spinner-Hintergrund, und Sie können loslegen !!!

<item Android:state_pressed="true">
    <shape>
        <solid Android:color="@color/materialBlueGray600" />
        <corners Android:radius="3dp" />
    </shape>
</item>
<item Android:state_selected="true">
    <shape>
        <solid Android:color="@color/materialGray50" />
        <corners Android:radius="3dp" />
    </shape>
</item>
<item>
    <layer-list>
        <item>
            <shape>
                <solid Android:color="@color/materialGray50" />
                <corners Android:radius="3dp" />
            </shape>
        </item>

        <item Android:gravity="right">
            <bitmap Android:antialias="true"  Android:gravity="right" Android:src="@drawable/ic_expand_small" />
        </item>
    </layer-list>
</item>

0
Hadi Note

Hier ist der Code des benutzerdefinierten Spinners. Bitte schau es dir an und sag es mir. Ich habe das noch nicht getestet. Informieren Sie mich bitte nach der Überprüfung, ob das Problem dadurch gelöst wird.

<Spinner                                
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@drawable/spinner_background"
    Android:gravity="center"
    Android:paddingRight="10dp"
    Android:spinnerMode="dropdown"
    Android:textColor="your text color"
    Android:textSize="your text size" />

Hier ist das drawable (spinner_background.xml), um den Hintergrund des Spinners zu erstellen.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" >

    <item>
        <shape Android:shape="rectangle" >
            <solid Android:color="border color" />

            <corners Android:radius="3dp" />
        </shape>
    </item>
    <item
        Android:bottom="1dp"
        Android:left="1dp"
        Android:right="1dp"
        Android:top="1dp">
        <shape Android:shape="rectangle" >
            <solid Android:color="@Android:color/white" />

            <corners Android:radius="3dp" />
        </shape>
    </item>

</layer-list>

Bearbeiten:

bitte klicke auf diesen Link, der dir eine Idee gibt ... /. Spinner-Hintergrund anpassen

OR

sie können so etwas tun.

<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>
0
RIJO RV