如何向 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 小部件添加提示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

从 Spinner 下拉列表中添加项目

必须向 Text 小部件提供非空字符串

javascript Spinner小部件

向 Kivy 添加小部件时如何确保功能正常

仅在一侧向 tkinter 小部件添加填充

php 如何在创世纪2.0框架中添加后窗口小部件区域 - WordPress提示