Ist es möglich, die Optionen eines Spinners direkt in der Layout-XML zu füllen? Diese Seite schlägt vor, dass ich einen ArrayAdapter verwenden sollte? Es scheint unangenehm, es nicht zu können.
Ist es möglich, die Optionen eines Spinners direkt in der Layout-XML zu füllen? Diese Seite schlägt vor, dass ich einen ArrayAdapter verwenden sollte? Es scheint unangenehm, es nicht zu können.
Antworten:
Ich bin mir nicht sicher, aber probieren Sie es aus.
Definieren Sie in Ihrer Datei strings.xml:
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>
In Ihrem Layout:
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:entries="@array/array_name"
/>
Ich habe gehört, dass dies beim Designer nicht immer funktioniert, aber es lässt sich gut kompilieren.
drawSelectorOnTop
da es keinen anderen Selektor als den Spinner selbst gibt. Die Lösung funktioniert aber definitiv, danke!
android:entryValues
. ListPreference unterstützt dies.
Spinner
und an AbsSpinner
. Sowohl auf API 19 als auch auf API 23 verwendet der AbsSpinner-Konstruktor, R.styleable.AbsSpinner_entries
jedoch nirgendwo entryValues
. Es ist nur ein Zufall, dass Ihr Code das tat, was Sie erwartet hatten. (Oder vielleicht haben die ROMs einiger Hersteller eine benutzerdefinierte Spinner-Implementierung, die tatsächlich android:entryValues
Definieren Sie dies in Ihrer String.xml-Datei und benennen Sie das gewünschte Array, z. B. "Weight".
<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>
und dieser Code in Ihrer layout.xml
<Spinner
android:id="@+id/fromspin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/Weight"
/>
Wird in Ihrer Java-Datei getActivity
als Fragment verwendet. Wenn Sie diesen Code in Aktivität schreiben, entfernen Sie ihn 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;
}
Zum ersten Kommentar: Wenn Sie dies tun, erhalten Sie eine Fehlermeldung (in Android Studio). Dies bezieht sich darauf, dass es außerhalb des Android-Namespace liegt. Wenn Sie nicht wissen, wie Sie diesen Fehler beheben können, sehen Sie sich das folgende Beispiel an. Hoffe das hilft!
Beispiel - Vorher:
<string-array name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
Beispiel - Nachher:
<string-array android:name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
string-array
, dass er ein name
Attribut hat, und erkennt das nicht android:name
.
android:entryValues="@array/array_name_values"
.