【发布时间】:2010-10-27 01:14:42
【问题描述】:
是否可以在布局 xml 中填充 Spinner 的选项? This page 建议我应该使用 ArrayAdapter?做不到好像很尴尬..
【问题讨论】:
标签: android
是否可以在布局 xml 中填充 Spinner 的选项? This page 建议我应该使用 ArrayAdapter?做不到好像很尴尬..
【问题讨论】:
标签: android
我不确定,但请试一试。
在你的 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"
/>
我听说这并不总是适用于设计器,但它编译得很好。
【讨论】:
android:entryValues="@array/array_name_values"。
drawSelectorOnTop,因为除了微调器本身之外没有单独的选择器。该解决方案确实有效,谢谢!
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 属性。