直接在布局xml中填充微调框


244

是否可以在布局xml中填充Spinner的选项?此页面建议我应该使用ArrayAdapter吗?似乎无法做到这一点。

Answers:


580

我对此不确定,但请试一试。

在您的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
快速说明...据我所知,微调器不支持,drawSelectorOnTop因为除了微调器本身之外没有单独的选择器。该解决方案当然可以,谢谢!
Jabari 2013年

11
@EГИІИОSpinner 支持android:entryValues。ListPreference确实支持它。
TalkLittle 2015年

1
@TalkLittle这是最近的弃用吗?在撰写本文时,它确实起作用了。
Blindstuff 2015年

1
@blindstuff很容易验证。看看源代码SpinnerAbsSpinner。在API 19和23上,AbsSpinner构造函数都使用,R.styleable.AbsSpinner_entries但没有使用entryValues。您的代码正在按预期执行操作只是一个巧合。(或者也许某些制造商的ROM具有可实际处理的自定义Spinner实现android:entryValues?)
TalkLittle

26

在您的String.xml文件中定义此名称,然后将数组命名为所需的名称,例如“ Weight”

<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名称空间之内。如果您不知道如何解决此错误,请查看下面的示例。希望这可以帮助!

示例-Before:

<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
丹·查尔蒂尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.