spinnerMode="dropdown"
モードでSpinner
を使用しています。事前に選択された最初のアイテムの代わりに、ユーザーにヒントを表示して、デフォルトの選択がないようにします(「アイテムを選択してください」など)。
これは私が得たUIです:
これは私が達成したいUIです:
EditText
ウィジェットにはAndroid:hint
属性があると考えましたが、Spinner
ウィジェットはありません。これを設定しても、必要なUIが得られません。これはAndroid 4.xのみのアプリなので、4.0より前の互換性に煩わされる必要はありません。
私はまだ簡単でクリーンなソリューションを見つけていませんが、カスタムアダプターとカスタムアイテムクラスを使用するこの回避策のみです。
まず、スピナーアイテムコンテンツのクラスが必要です。
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クラスのフラグを使用して、そのアイテムなどのテキストの色を設定できます。