Ik realiseer me dat zelfs ik WRAP_CONTENT
voor mijn spinner gebruik (ik vermijd het gebruik van match_parent
omdat ik de spinner niet te lang wil hebben), en gebruik match_parent
voor de itemweergave van de spinner en drop-down itemweergave,
Ik vind nog steeds dat de breedte van de spinner niet hetzelfde is als de breedte van het grootste item
Zoals je kunt zien, is de UnitedKingdom
niet geschikt.
Dus als ik de UnitedKingdom
selecteer, wordt alleen de grootte van de spinner aangepast
Hoe kan ik de grootte van de spinner aanpassen aan de grootste beschikbare itembreedte, zelfs zonder expliciet het grootste item te selecteren?
Mijn spinner-XML is
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp" />
en de XML-weergaven van mijn spinner zijn
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text_view_0"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="10dp"
android:gravity="center_vertical" />
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/checked_text_view_0"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="48dp"
android:minHeight="48dp"
android:drawablePadding="10dp" />
Antwoord 1, autoriteit 100%
U zou het gewenste effect moeten kunnen krijgen door de breedte van de vervolgkeuzelijst op te geven als WRAP_CONTENT
:
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:dropDownWidth="wrap_content"
android:spinnerMode="dropdown" />
Dit meet maximaal 15 items in de adapter van de spinner om de breedte te bepalen die deze moet gebruiken.
Antwoord 2, autoriteit 47%
Ik “los” het probleem alleen maar op met
<Spinner
android:id="@+id/country_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="200dp"
android:layout_marginBottom="10dp" />
200 dp is gewoon een try-n-error-waarde om ervoor te zorgen dat alle items in de vervolgkeuzelijst zichtbaar zijn.
Antwoord 3, autoriteit 16%
In dergelijke gevallen waarin u alle landen wilt vermelden of een grote lijst wilt hebben
Probeer: spinnerMode="dialog"
zoals hieronder weergegeven:
<Spinner
android:id="@+id/spinnerId"
android:layout_width="wrap_content"
android:dropDownWidth="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:spinnerMode="dialog"/>
Antwoord 4
Zet uw TextView in LineanLayout in Spinner Item XML,
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text_view_0"
style="?android:attr/spinnerItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawablePadding="10dp"
android:gravity="center_vertical" />
</LinearLayout>
En geef de ID van uw TextView door aan de aangepaste adapterconstructor
CustomAdapter adapter = new CustomAdapter(this,R.layout.spinner_item,R.id.text_view_0,arraylist);
Constructeur
public CustomAdapter(Context context, int resource, int textViewId, ArrayList<String> resultList) {
super(context, resource, textViewId, resultList);
...
...
}
Antwoord 5
Stel uw breedte in op 0dp en een lay-outgewicht van 1. Het volgende zal het formaat voor u aanpassen.
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="?android:attr/actionBarSize"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/test label"/>
<Spinner
android:id="@+id/test_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:dropDownWidth="wrap_content"
android:layout_weight="1"
android:prompt="@string/test_prompt"
android:spinnerMode="dropdown" />
</LinearLayout>
Antwoord 6
Je kunt spinnerMode="dialog"
proberen, maar het is slechts een tijdelijke oplossing, niet het juiste antwoord. Omdat er een nieuw venster met een dialoogvenster wordt weergegeven.
Dus hier is de manier om het te doen. Het past automatisch bij de inhoud.
Het hangt er sterk van af hoe u uw aangepaste lay-out instelt. Mag ik je aanraden om je eigen xml-bestand myspinner_custom_dropdown.xml
te schrijven. De aanbevolen manier is nu ConstraintLayout
van androidX.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckedTextView
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:ellipsize="marquee"
android:singleLine="true"
app:layout_constraintStart_toEndOf="@+id/item_image"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/item_image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:src="@drawable/image"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Belangrijk: u kunt uw aangepaste lay-out gebruiken met uw adapter
dataAdapter.setDropDownViewResource(R.layout.myspinner_custom_dropdown);
Dat is alles, je hebt sommige soorten hardcore-attributen niet nodig in je spinner-declaratie.
<Spinner
android:id="@+id/my_spinner"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp" />
Antwoord 7
Probeer dit: android:layout_width="fill_parent"