Можно ли заполнить параметры Spinner прямо в макете XML? Эта страница предлагает мне использовать ArrayAdapter? Кажется неловким, не в состоянии сделать это ..
Можно ли заполнить параметры Spinner прямо в макете XML? Эта страница предлагает мне использовать ArrayAdapter? Кажется неловким, не в состоянии сделать это ..
Ответы:
Я не уверен в этом, но попробуй.
В вашем 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"
/>
Я слышал, что это не всегда работает на дизайнера, но компилируется нормально.
drawSelectorOnTop
Spinner не поддерживает, так как нет другого отдельного селектора, кроме самого Spinner. Решение определенно работает, хотя, спасибо!
android:entryValues
. ListPreference поддерживает это.
Spinner
и AbsSpinner
. И в API 19, и в 23 конструктор AbsSpinner использует, R.styleable.AbsSpinner_entries
но нигде не использует entryValues
. Это просто совпадение, что ваш код делал то, что вы ожидали. (Или, может быть, ROM некоторых производителей имеют собственную реализацию Spinner, которая фактически обрабатывает android:entryValues
?)
Определите это в файле 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;
}
Относительно первого комментария: если вы сделаете это, вы получите ошибку (в 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>
string-array
чтобы он имел name
атрибут, и не распознает его android:name
.
android:entryValues="@array/array_name_values"
.