Подтвердить что ты не робот

Как добавить подсказку к виджету Spinner?

У меня есть Spinner в spinnerMode="dropdown" режиме. Вместо предварительно выбранного первого элемента я хочу показать пользователю подсказку, чтобы не было выбора по умолчанию (например, "Пожалуйста, выберите элемент" )

Это интерфейс, который я получил:

the current UI

и это пользовательский интерфейс, который я хочу достичь:

the UI I want to achive

Я понял, что виджет EditText имеет атрибут android:hint, но не виджет Spinner, и его установка не приносит мне пользовательский интерфейс, который я хочу. Это приложение Android 4.x, поэтому мне не нужно беспокоиться о каких-либо материалах совместимости с версией до 4.0.

4b9b3361

Ответ 1

Я еще не нашел простого и чистого решения, только это обходное решение с использованием пользовательских адаптеров и настраиваемого класса элементов:

Сначала нам нужен класс для содержимого элемента spinner:

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, чтобы установить цвет текста для этого элемента или что-то еще.