web-dev-qa-db-ja.com

スピナーウィジェットにヒントを追加するにはどうすればよいですか?

spinnerMode="dropdown"モードでSpinnerを使用しています。事前に選択された最初のアイテムの代わりに、ユーザーにヒントを表示して、デフォルトの選択がないようにします(「アイテムを選択してください」など)。

これは私が得たUIです:

the current UI

これは私が達成したいUIです:

the UI I want to achive

EditTextウィジェットにはAndroid:hint属性があると考えましたが、Spinnerウィジェットはありません。これを設定しても、必要なUIが得られません。これはAndroid 4.xのみのアプリなので、4.0より前の互換性に煩わされる必要はありません。

15
Jens Kohl

私はまだ簡単でクリーンなソリューションを見つけていませんが、カスタムアダプターとカスタムアイテムクラスを使用するこの回避策のみです。

まず、スピナーアイテムコンテンツのクラスが必要です。

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クラスのフラグを使用して、そのアイテムなどのテキストの色を設定できます。

24
IsaacCisneros