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

cam*_*aca 233 android

是否可以在布局xml中填充Spinner的选项?这个页面建议我应该使用ArrayAdapter?不能做它似乎很尴尬..

bli*_*uff 557

我不确定这一点,但试一试.

在strings.xml中定义:

<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)

在你的布局中:

<Spinner 
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="true"
        android:entries="@array/array_name"
    />
Run Code Online (Sandbox Code Playgroud)

我听说这并不总是适用于设计师,但它编译得很好.

  • 只是想补充一点,如果你想要每个选定项目的单独值,你可以指定`android:entryValues ="@ array/array_name_values"`. (38认同)
  • @ΕГИІИОSpinner不**支持`android:entryValues`.ListPreference确实支持它. (11认同)
  • 一个快速说明......根据我的理解,Spinners不支持`drawSelectorOnTop`,因为除了Spinner本身之外没有单独的选择器.解决方案肯定有效,谢谢! (3认同)
  • @blindstuff 这很容易验证。查看`Spinner`和`AbsSpinner`的源代码。在 API 19 和 23 上,AbsSpinner 构造函数都使用“R.styleable.AbsSpinner_entries”,但没有使用“entryValues”。您的代码执行您所期望的操作只是巧合。(或者也许某些制造商的 ROM 有一个自定义的 Spinner 实现,实际上可以处理“android:entryValues”?) (2认同)

小智 23

在String.xml文件中定义它并将数组命名为您想要的名称,例如"Weight"

<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)

这个代码在你的layout.xml中

<Spinner 
        android:id="@+id/fromspin"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:entries="@array/Weight"
 />
Run Code Online (Sandbox Code Playgroud)

在你的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;
    }
Run Code Online (Sandbox Code Playgroud)