Relleno giratorio directamente en el diseño xml

246

¿Es posible llenar las opciones de un Spinner directamente en el diseño xml? Esta página sugiere que debería usar un ArrayAdapter? Parece incómodo no poder hacerlo ...

cambraca
fuente

Respuestas:

582

No estoy seguro de esto, pero inténtalo.

En tu strings.xml define:

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

En tu diseño:

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

Escuché que esto no siempre funciona en el diseñador, pero se compila bien.

ceguera
fuente
39
Solo quería agregar que si desea valores separados para el elemento seleccionado, puede especificar android:entryValues="@array/array_name_values".
Ε Г И І И О
3
Una nota rápida ... según tengo entendido, los Spinners no son compatibles drawSelectorOnTopya que no hay un selector separado que no sea el Spinner en sí. Sin embargo, la solución definitivamente funciona, ¡gracias!
Jabari
11
@ ΕГИІИО Spinner NO es compatible android:entryValues. ListPreference lo admite.
TalkLittle
1
@TalkLittle ¿fue esta una desaprobación reciente? En el momento en que esto se escribió, funcionó.
blindstuff
1
@blindstuff Es fácil de verificar. Mira el código fuente de Spinnery AbsSpinner. Tanto en API 19 como en 23, el constructor AbsSpinner hace uso de, R.styleable.AbsSpinner_entriespero en ninguna parte lo hace entryValues. Es solo una coincidencia que su código estaba haciendo lo que esperaba. (¿O tal vez las ROM de algunos fabricantes tienen una implementación Spinner personalizada que realmente maneja android:entryValues?)
TalkLittle
26

Defina esto en su archivo String.xml y asigne un nombre a la matriz que desee, como "Peso"

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

y este código en tu layout.xml

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

En su archivo java, getActivityse usa en fragmentos; Si escribe ese código en la actividad, elimínelo 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;
    }
Zona tecnológica
fuente
-2

Respecto al primer comentario: si haces esto, obtendrás un error (en Android Studio). Esto se refiere a que está fuera del espacio de nombres de Android. Si no sabe cómo solucionar este error, consulte el ejemplo a continuación. ¡Espero que esto ayude!

Ejemplo -Antes:

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

Ejemplo - Después:

<string-array android:name="roomSize">
    <item>Small(0-4)</item>
    <item>Medium(4-8)</item>
    <item>Large(9+)</item>
</string-array>
CPUSCIMAJOR
fuente
1
No funciona El archivo XML quiere string-arrayque tenga un nameatributo y no reconoce el android:nameuno.
Dan Chaltiel