如何向Spinner小部件添加提示?

Jen*_*ohl 15 user-interface android hint spinner

我有一个Spinnerin spinnerMode="dropdown"模式.而不是预先选择的第一项,我想向用户显示提示,以便没有默认选择(例如»请选择项目«)

这是我得到的用户界面:

当前的用户界面

这是我想要的UI:

我希望获得的用户界面

我认为EditText小部件有一个android:hint属性,但不是Spinner小部件和设置它没有带给我我想要的UI.这是一个仅限Android 4.x的应用程序,因此我不必为任何4.0之前的兼容性问题而烦恼.

Isa*_*ros 24

我还没有找到一个简单而干净的解决方案,只有使用自定义适配器和自定义项类的解决方法:

首先,我们需要一个用于微调项目内容的类:

class SpinnerItem {
        private final String text;
        private final boolean isHint;

        public SpinnerItem(String strItem, boolean flag) {
            this.isHint = flag;
            this.text = strItem;
        }

        public String getItemString() {
            return text;
        }

        public boolean isHint() {
            return isHint;
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我们的适配器类:

class MySpinnerAdapter extends ArrayAdapter<SpinnerItem> {
        public MySpinnerAdapter(Context context, int resource, List<SpinnerItem> objects) {
            super(context, resource, objects);
        }

        @Override
        public int getCount() {
            return super.getCount() - 1; // This makes the trick: do not show last item
        }

        @Override
        public SpinnerItem getItem(int position) {
            return super.getItem(position);
        }

        @Override
        public long getItemId(int position) {
            return super.getItemId(position);
        }

    }
Run Code Online (Sandbox Code Playgroud)

最后我们使用这样的解决方法:

ArrayList<SpinnerItem> items = new ArrayList<SpinnerItem>();
        items.add(new SpinnerItem("Item 1", false));
        items.add(new SpinnerItem("Item 2", false));
        items.add(new SpinnerItem("HINT", true)); // Last item 

        MySpinnerAdapter adapter = new MySpinnerAdapter(this, android.R.layout.simple_spinner_item, items);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setSelection(items.size() - 1);
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用SpinnerItem类中的标志来设置该项目的文本颜色或其他任何内容.

  • 谢谢你的工作就像一个魅力.. :)还有一件事不需要创建单独的类(如果你想使用List <String,就像SpinnerItem一样) (3认同)
  • 你的适配器出了什么问题..它显示了我输入列表中的值所包含的包名称.... (3认同)