So passen Sie einen Spinner in Android an

Lesezeit: 9 Minuten

So passen Sie einen Spinner in Android an
Shruti

Ich möchte der Dropdown-Liste von a eine benutzerdefinierte Höhe hinzufügen Spinnersagen wir 30dp, und ich möchte die Trennlinien der Dropdown-Liste von ausblenden Spinner.

Bisher habe ich versucht, den folgenden Stil zu implementieren Spinner:

<style name="spinner_style">
        <item name="android:paddingLeft">0dp</item>
        <item name="android:dropDownWidth">533dp</item>
        <item name="android:showDividers">none</item>
        <item name="android:dividerHeight">0dp</item>
        <item name="android:popupBackground">@drawable/new_bg</item>
        <item name="android:dropDownHeight">70dp</item>
        <item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
        <item name="android:dropDownSelector">@android:color/white</item>
 </style>

und der Code meines Spinners lautet:

<Spinner
            android:id="@+id/pioedittxt5"
            android:layout_width="543dp"
            android:layout_height="63dp"
            android:layout_toRightOf="@+id/piotxt5"
            android:background="@drawable/spinner"
            style="@style/spinner_style"
            android:dropDownVerticalOffset="-53dp"
            android:spinnerMode="dropdown"
            android:drawSelectorOnTop="true"
            android:entries="@array/travelreasons"
            android:prompt="@string/prompt" />

Aber nichts scheint zu funktionieren.

  • Keiner der Stile wird angewendet ? PopupBackGround oder irgendetwas anderes? Seltsam.

    – Chintan Soni

    22. Mai 2013 um 15:09 Uhr

  • @Houcine: Ich habe diese Beispiele bereits ausprobiert. Ich möchte die Höhe der Dropdown-Liste anpassen

    – Schruti

    23. Mai 2013 um 5:42 Uhr

  • @shree202 : kein Stil gilt

    – Schruti

    23. Mai 2013 um 5:42 Uhr

  • @ComeIn , es ist kein Android-Stil, sondern ein benutzerdefinierter, den er erstellt hat. Deshalb hat er nur “style=”

    – CyberClaw

    21. November 2016 um 10:28 Uhr

So passen Sie einen Spinner in Android an
Tarun

Erstellen Sie einen benutzerdefinierten Adapter mit einem benutzerdefinierten Layout für Ihren Spinner.

Spinner spinner = (Spinner) findViewById(R.id.pioedittxt5);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.travelreasons, R.layout.simple_spinner_item);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);

R.layout.simple_spinner_item

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="@style/spinnerItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee" />

R.layout.simple_spinner_dropdown_item

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1"
    style="@style/spinnerDropDownItemStyle"
    android:maxLines="1"
    android:layout_width="match_parent"
    android:layout_height="?android:attr/dropdownListPreferredItemHeight"
    android:ellipsize="marquee" />

Fügen Sie in Stilen Ihre benutzerdefinierten Abmessungen und Höhen gemäß Ihren Anforderungen hinzu.

 <style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem">

  </style>

  <style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem">

  </style>

  • Versuchen Sie, sich zu ändern <item name="android:height"> zu <item name="android:layout_height">

    – Tarun

    28. Juni 2013 um 11:45 Uhr

  • danke für die antwort.. versucht, aber ohne erfolg… daran gearbeitet in den letzten 3-4 tagen.. jetzt bin ich nur noch irritiert 🙁

    – 7blauer Phönix

    28. Juni 2013 um 12:01 Uhr


  • @Tarun, brauchst du nicht android:id="@+android:id/text1" in der Datei simple_spinner_dropdown_item.xml?

    – Fledermaus

    22. Februar 2014 um 11:34 Uhr


  • Ändern Sie in R.layout.simple_spinner_dropdown_item den android:layout_height-Wert in „?attr/dropdownListPreferredItemHeight“ oder Sie erhalten eine Fehlermeldung: „Error: Attribute is not public“

    – Lönix

    14. Juni 2016 um 6:05 Uhr

  • Für zukünftige Besucher dieser Antwort: Umschließen Sie TextView und CheckedTextview nicht innerhalb eines Layouts. Veröffentlichen Sie es direkt in Ihrer layout_file.xml-Datei. Ich hing hier einige Stunden fest, bis ich herausfand, was der Fehler war.

    – Francisco Romero

    4. August 2016 um 8:57 Uhr

1641996401 250 onActivityResult wird in der neuen verschachtelten Fragment API nicht aufgerufen
Binesh Kumar

Sie können ein vollständig benutzerdefiniertes Spinner-Design wie z

Schritt 1: Erstellen Sie im drawable-Ordner background.xml für einen Rand des Spinners.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/transparent" />
<corners android:radius="5dp" />
<stroke
android:width="1dp"
   android:color="@android:color/darker_gray" />
</shape>

Schritt 2: Verwenden Sie für das Layout-Design des Spinners dieses Dropdown-Symbol oder ein beliebiges Bild drop.png
Geben Sie hier die Bildbeschreibung ein

 <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="3dp"
    android:layout_weight=".28"
    android:background="@drawable/spinner_border"
    android:orientation="horizontal">

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:background="@android:color/transparent"
        android:gravity="center"
        android:layout_marginLeft="5dp"
        android:spinnerMode="dropdown" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_gravity="center"
        android:src="https://stackoverflow.com/questions/16694786/@mipmap/drop" />

</RelativeLayout>

Endlich sieht es aus wie das Bild unten und es ist überall im runden Bereich anklickbar und es ist nicht nötig, Click Lister für ImageView zu schreiben.

Geben Sie hier die Bildbeschreibung ein

Schritt 3: Entfernen Sie für das Dropdown-Design die Zeile aus der Dropdown-Listenansicht und ändern Sie die Hintergrundfarbe. Erstellen Sie einen benutzerdefinierten Adapter wie z

Spinner spinner = (Spinner) findViewById(R.id.spinner1);
String[] years = {"1996","1997","1998","1998"};
ArrayAdapter<CharSequence> langAdapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.spinner_text, years );
langAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown);
mSpinner5.setAdapter(langAdapter);

Erstellen Sie im Layoutordner R.layout.spinner_text.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layoutDirection="ltr"
android:id="@android:id/text1"
style="@style/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:paddingLeft="2dp"
/>

Erstellen Sie im Layoutordner simple_spinner_dropdown.xml

<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="@style/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:singleLine="true" />

In Stilen können Sie benutzerdefinierte Abmessungen und Höhen gemäß Ihren Anforderungen hinzufügen.

<style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem">
</style>

<style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem">
</style>

Endlich sieht aus wie so

Geben Sie hier die Bildbeschreibung ein

Je nach Anforderung können Sie die Hintergrundfarbe und den Text der Dropdown-Farbe ändern, indem Sie die Hintergrundfarbe oder die Textfarbe von simple_spinner_dropdown.xml ändern

  • meinst du im ersten Codeausschnitt android:height=”1dp” in Zeile 6?

    – Willi Mentzel

    29. Juni 2016 um 13:25 Uhr

  • Schreibe aus Versehen zweimal android:width = “1dp”

    – Binesh Kumar

    30. Juni 2016 um 10:32 Uhr

  • Kein Problem, ich wollte es nur nicht selbst bearbeiten, weil ich mir nicht sicher war, ob man die Höhe mit “1dp” angeben wollte oder ob es nur ein Duplikat war. aber gute antwort. 🙂

    – Willi Mentzel

    30. Juni 2016 um 10:45 Uhr

  • @BineshKumar Hey, darf ich wissen, wo du CheckedTextView deklariert hast? Denn als ich den Code eingefügt habe, sagte er mir, dass das Element zuerst deklariert werden muss

    – Schwarze Mamba

    18. Mai 2017 um 3:43 Uhr

  • Mann, Sie hätten Namen in Ihren Layouts und Drawables verwenden können, ich habe eine halbe Stunde damit verbracht und immer noch keine Ahnung, was ich tun soll. Minus für schlechte Antwort.

    – Anton Kizema

    2. Mai 2018 um 12:41 Uhr

Die eleganteste und flexibelste Lösung, die ich bisher gefunden habe, ist hier:
http://android-er.blogspot.sg/2010/12/custom-arrayadapter-for-spinner-with.html

Gehen Sie grundsätzlich wie folgt vor:

  1. Erstellen Sie eine benutzerdefinierte Layout-XML-Datei für Ihr Dropdown-Element, sagen wir, ich nenne sie spinner_item.xml
  2. Erstellen Sie eine benutzerdefinierte Ansichtsklasse für Ihren Dropdown-Adapter. In dieser benutzerdefinierten Klasse müssen Sie Ihr benutzerdefiniertes Dropdown-Elementlayout in den Methoden getView() und getDropdownView() überschreiben und festlegen. Mein Code ist wie folgt:

    public class CustomArrayAdapter extends ArrayAdapter<String>{
    
    private List<String> objects;
    private Context context;
    
    public CustomArrayAdapter(Context context, int resourceId,
         List<String> objects) {
         super(context, resourceId, objects);
         this.objects = objects;
         this.context = context;
    }
    
    @Override
    public View getDropDownView(int position, View convertView,
        ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      return getCustomView(position, convertView, parent);
    }
    
    public View getCustomView(int position, View convertView, ViewGroup parent) {
    
    LayoutInflater inflater=(LayoutInflater) context.getSystemService(  Context.LAYOUT_INFLATER_SERVICE );
    View row=inflater.inflate(R.layout.spinner_item, parent, false);
    TextView label=(TextView)row.findViewById(R.id.spItem);
     label.setText(objects.get(position));
    
    if (position == 0) {//Special style for dropdown header
          label.setTextColor(context.getResources().getColor(R.color.text_hint_color));
    }
    
    return row;
    }
    
    }
    
  3. Verwenden Sie in Ihrer Aktivität oder Ihrem Fragment den benutzerdefinierten Adapter für Ihre Spinner-Ansicht. Etwas wie das:

    Spinner sp = (Spinner)findViewById(R.id.spMySpinner);
    ArrayAdapter<String> myAdapter = new CustomArrayAdapter(this, R.layout.spinner_item, options);
    sp.setAdapter(myAdapter);
    

wobei Optionen die Liste der Dropdown-Elementzeichenfolgen ist.

  • Der Trick für mich bestand darin, getDropDownView zu überschreiben, ich überschrieb getView, wusste aber nicht, dass ich diese Methode überschreiben musste.

    – estebanuri

    8. August 2017 um 22:14 Uhr

1646320994 66 So passen Sie einen Spinner in Android an
Sunil

Versuche dies

Ich hatte viele Probleme, als ich eine andere Lösung ausprobierte … Nach viel Forschung und Entwicklung habe ich jetzt eine Lösung

  1. Erstellen Sie custom_spinner.xml im Layoutordner und fügen Sie diesen Code ein

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorGray">
    <TextView
    android:id="@+id/tv_spinnervalue"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/colorWhite"
    android:gravity="center"
    android:layout_alignParentLeft="true"
    android:textSize="@dimen/_18dp"
    android:layout_marginTop="@dimen/_3dp"/>
    <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="@drawable/men_icon"/>
    </RelativeLayout>
    
  2. bei Ihrer Tätigkeit

    Spinner spinner =(Spinner)view.findViewById(R.id.sp_colorpalates);
    String[] years = {"1996","1997","1998","1998"};
    spinner.setAdapter(new SpinnerAdapter(this, R.layout.custom_spinner, years));
    
  3. Erstellen Sie eine neue Adapterklasse

    public class SpinnerAdapter extends ArrayAdapter<String> {
    private String[] objects;
    
    public SpinnerAdapter(Context context, int textViewResourceId, String[] objects) {
        super(context, textViewResourceId, objects);
        this.objects=objects;
    }
    
    @Override
    public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    @NonNull
    @Override
    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
        return getCustomView(position, convertView, parent);
    }
    
    private View getCustomView(final int position, View convertView, ViewGroup parent) {
        View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_spinner, parent, false);
        final TextView label=(TextView)row.findViewById(R.id.tv_spinnervalue);
        label.setText(objects[position]);
        return row;
    }
    }
    

Das hat bei mir funktioniert:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),R.layout.simple_spinner_item,areas);
            Spinner areasSpinner = (Spinner) view.findViewById(R.id.area_spinner);
            areasSpinner.setAdapter(adapter);

und in meinem Layout-Ordner, den ich erstellt habe simple_spinner_item:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
// add custom fields here 
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
android:gravity="center_vertical"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingLeft="?android:attr/listPreferredItemPaddingLeft"
android:paddingRight="?android:attr/listPreferredItemPaddingRight" />

Entfernen Sie die App programmgesteuert aus den letzten Apps
Vivek Barai

Ich habe ein kleines Demo-Projekt darauf aufgebaut, das Sie sich ansehen können
Link zum Projekt

924740cookie-checkSo passen Sie einen Spinner in Android an

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy