Android:微调提示

有没有提供一个微调的提示类似于编辑文本字段提供的提示。 我知道你可以使用一个提示给你一个标题栏,但仍然留下初始微调框字段为空,直到你点击微调。 我现在有一个粗糙的方式来设置一个虚拟字段作为问题的微调数组的第一部分,然后在最后检查,以确保微调不等于问题string。 有没有更清洁/更好的方法呢?

谢谢!

这里的解决scheme可能比Ravi Vyas代码简单一些(感谢您的灵感!):

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item) { @Override public View getView(int position, View convertView, ViewGroup parent) { View v = super.getView(position, convertView, parent); if (position == getCount()) { ((TextView)v.findViewById(android.R.id.text1)).setText(""); ((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed" } return v; } @Override public int getCount() { return super.getCount()-1; // you dont display last item. It is used as hint. } }; adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); adapter.add("Item 1"); adapter.add("Item 2"); adapter.add("Hint to be displayed"); spinner.setAdapter(adapter); spinner.setSelection(adapter.getCount()); //display hint 

您可以设置您自己的微调适配器,并覆盖getView方法显示提示,而不是一个项目。 我在github上创build了一个示例项目,在这里查看

比设置自己的微调器适配器更简单的方法是只使用一个button,并像一个微调对象样式

 android:background="@android:drawable/btn_dropdown" 

然后设置button的onClick事件以打开单个项目select对话框。 然后,您可以用button的文本做任何你想要的。

这一直是我处理这个问题的首选方法。 希望它可以帮助别人。

编辑:最近我又一直在玩这个(有人问我前一个例子)。 如果您使用全息主题,这个策略看起来有点不同。 但是,如果您使用其他主题(如Theme.Black),则看起来完全相同。

为了certificate这一点,我做了一个简单的应用程序,有一个正常的微调与我的自定义button微调。 我把它扔在一个GitHub仓库里 ,但是这里是Activity的样子:

 package com.stevebergamini.spinnerbutton; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Spinner; public class MainActivity extends Activity { Spinner spinner1; Button button1; AlertDialog ad; String[] countries; int selected = -1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner1 = (Spinner) findViewById(R.id.spinner1); button1 = (Button) findViewById(R.id.button1); countries = getResources().getStringArray(R.array.country_names); // You can also use an adapter for the allert dialog if you'd like // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countries); ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { button1.setText(countries[which]); selected = which; ad.dismiss(); }}).setTitle(R.string.select_country).create(); button1.setOnClickListener( new OnClickListener(){ @Override public void onClick(View v) { ad.getListView().setSelection(selected); ad.show(); }}); } }