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):
Hier ist was ich will:
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>
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
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>
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.
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" />
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:
Eine ausführlichere Erläuterung des Prozesses und einige Beispiele für XML-Dateien finden Sie in meiner zugehörigen Antwort:
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>
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.
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
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>
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>