Spinner'ı doğrudan xml düzeninde doldurma


246

Bir Spinner'ın seçeneklerini doğrudan xml düzeninde doldurmak mümkün mü? Bu sayfa bir ArrayAdapter kullanmalıyım? Bunu yapamamak garip görünüyor ...

Yanıtlar:


582

Bundan emin değilim, ama denemek.

Strings.xml dosyasında şunları tanımlayın:

<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>

Düzeninizde:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />

Bunun her zaman tasarımcıda işe yaramadığını duydum, ama iyi derliyor.


39
Sadece seçilen öğe başına ayrı değerler istiyorsanız, belirtebileceğinizi eklemek istedim android:entryValues="@array/array_name_values".
Г И: И О

3
Kısa bir not ... Anladığım kadarıyla, drawSelectorOnTopSpinner desteklemiyor çünkü Spinner'ın dışında ayrı bir seçici yok. Çözüm kesinlikle çalışıyor, teşekkürler!
Jabari

11
@ ΕГИІИО Spinner gelmez DEĞİL desteklemek android:entryValues. ListPreference bunu destekliyor.
TalkLittle

1
@TalkLittle bu son kullanımdan kaldırıldı mı? Bu yazıldığı zaman işe yaradı.
blindstuff

1
@blindstuff Doğrulamak kolaydır. Kaynak koduna bak Spinnerve AbsSpinner. Hem API 19 hem de 23'te AbsSpinner yapıcısı kullanır, R.styleable.AbsSpinner_entriesancak hiçbir yerde kullanmazlar entryValues. Kodunuzun beklediğiniz şeyi yapması sadece bir tesadüf. (Veya bazı üreticilerin ROM'larında gerçekten işleyen özel bir Spinner uygulaması vardır android:entryValues?)
TalkLittle

26

Bunu String.xml dosyanızda tanımlayın ve diziye "Ağırlık" gibi bir ad verin

<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>

ve layout.xml dosyasındaki bu kodu

<Spinner 
        android:id="@+id/fromspin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/Weight"
 />

Java dosyanızda, getActivityparça halinde kullanılır; bu kodu etkinliğe yazarsanız, kaldırın getActivity.

a = (Spinner) findViewById(R.id.fromspin);

 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(),
                R.array.weight, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        a.setAdapter(adapter);
        a.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                if (a.getSelectedItem().toString().trim().equals("Kilogram")) {
                    if (!b.getText().toString().isEmpty()) {
                        float value1 = Float.parseFloat(b.getText().toString());
                        float kg = value1;
                        c.setText(Float.toString(kg));
                        float gram = value1 * 1000;
                        d.setText(Float.toString(gram));
                        float carat = value1 * 5000;
                        e.setText(Float.toString(carat));
                        float ton = value1 / 908;
                        f.setText(Float.toString(ton));
                    }

                }



            public void onNothingSelected(AdapterView<?> parent) {
                // Another interface callback
            }
        });
        // Inflate the layout for this fragment
        return v;
    }

-2

İlk yorum ile ilgili olarak: Bunu yaparsanız bir hata alırsınız (Android Studio'da). Bu, Android ad alanının dışında olmasıyla ilgilidir. Bu hatayı nasıl çözeceğinizi bilmiyorsanız, aşağıdaki örneği inceleyin. Bu yardımcı olur umarım!

Örnek -Önce:

<string-array name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

Örnek - Sonrası:

<string-array android:name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>

1
Çalışmıyor. XML dosyası string-arraybir nameniteliğe sahip olmasını ister ve android:namebirini tanımıyor .
Dan Chaltiel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.