Населення прядильника безпосередньо в макеті xml


246

Чи можливо заповнити параметри Spinner прямо у макеті xml? Ця сторінка підказує, що я повинен використовувати ArrayAdapter? Здається незручно не в змозі це зробити ..

Відповіді:


582

Я не впевнений у цьому, але пострілюйте.

У вашому strings.xml визначте:

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

У вашому макеті:

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

Я чув, що це не завжди працює на дизайнера, але це прекрасно.


39
Просто хотів додати, що якщо ви хочете окремі значення для вибраного елемента, ви можете вказати android:entryValues="@array/array_name_values".
Ε Г І І І О

3
Одна швидка примітка ... Наскільки я розумію, Spinners не підтримують, drawSelectorOnTopоскільки немає іншого вибору, крім самого Spinner. Але рішення, безумовно, працює, дякую!
Джабарі

11
@ ΕГИІІО Spinner НЕ підтримує android:entryValues. ListPreference підтримує його.
TalkLittle

1
@TalkLittle це була недавня депресія? На той час це було написано.
сліп

1
@blindstuff Це легко перевірити. Подивіться на вихідний код Spinnerта AbsSpinner. І в API 19 і 23 конструктор AbsSpinner використовує, R.styleable.AbsSpinner_entriesале ніде їх не використовує entryValues. Це лише збіг обставин, що ваш код робив те, що ви очікували. (Або, можливо, у ПЗУ деяких виробників є спеціальна реалізація Spinner, яка насправді обробляє android:entryValues?)
TalkLittle

26

Визначте це у вашому файлі String.xml та назвіть масив, який ви хочете, наприклад "Вага"

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

і цей код у вашому layout.xml

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

У вашому файлі java getActivityвикористовується в фрагменті; якщо ви пишете цей код у активності, тоді видаліть 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

Що стосується першого коментаря: якщо ви це зробите, ви отримаєте помилку (в Android Studio). Це стосується того, що він знаходиться поза простором імен Android. Якщо ви не знаєте, як виправити цю помилку, перегляньте приклад нижче. Сподіваюсь, це допомагає!

Приклад -Перед:

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

Приклад - Після:

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

1
Не працює. XML-файл хоче, string-arrayщоб він мав nameатрибут, а не розпізнає його android:name.
Dan Chaltiel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.