如何向 Spinner 小部件添加提示? [复制]
Posted
技术标签:
【中文标题】如何向 Spinner 小部件添加提示? [复制]【英文标题】:How can I add a hint to the Spinner widget? [duplicate] 【发布时间】:2012-12-02 09:29:41 【问题描述】:我在spinnerMode="dropdown"
模式下有一个Spinner
。而不是预选的第一个项目,我想向用户显示一个提示,这样就没有默认选择(比如»请选择一个项目«)
这是我得到的用户界面:
这是我想要实现的 UI:
我认为EditText
小部件有一个android:hint
属性,但没有Spinner
小部件,并且设置它不会给我带来我想要的用户界面。这是一个仅限 Android 4.x 的应用程序,因此我不必为任何 4.0 之前的兼容性问题而烦恼。
【问题讨论】:
android:prompt="@String/select" 是否有效。? 遗憾的是,否:提示是针对在点击Spinner
小部件后出现的下拉菜单。此外,如果使用 Android 4.x 中新的 Holo-Themes,它就不起作用了。
微调器适配器有不同的方法,一种用于下拉视图,另一种用于具有所有选项的列表视图。因此,当没有选择任何内容时,适配器默认返回此 TextView,否则选择项。
你找到解决方案了吗???
@izaakcito 我可能会选择这个解决方案:***.com/a/12386866/408150。完成后,我会用我的解决方案更新这个问题。
【参考方案1】:
我还没有找到一个简单而干净的解决方案,只有这个使用自定义适配器和自定义项目类的解决方法:
首先,我们需要一个用于微调项目内容的类:
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;
然后是我们的适配器类:
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);
最后我们使用这样的解决方法:
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);
然后您可以使用 SpinnerItem 类中的标志来设置该项目的文本颜色或其他任何内容。
【讨论】:
不错!我喜欢这种变通方法。问题:编辑文本中提示文本的颜色是什么? 看起来编辑文本中提示的文本颜色是Color.rgb(148, 150, 148)
感谢它就像一个魅力......
您的适配器有问题.. 显示了我在列表中设置的值的包名称 ....
@chhameed 是的,我找到了解决这个问题的方法......只是在适配器中做了一点改变......通过设置项目的计数 = count-1 并在列表项中添加您希望默认显示...它现在对我有用.. 并尝试不使用他的项目类别,只需使用默认项目...全部。如果有任何问题,我可以用我的代码喂你。问候。以上是关于如何向 Spinner 小部件添加提示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章