Как мне сделать отключенное состояние Spinner'а отключенным? - PullRequest
28 голосов
/ 04 октября 2011

Когда я отключаю мой Spinner, он выглядит почти так же, как и до отключения, т.е.

До

enter image description here

* После 1011 *

enter image description here

Он отключен и поэтому функционально все в порядке, но я бы хотел, чтобы выглядел отключенным. Этот вопрос, кажется, задавался вокруг ловушек ( здесь и здесь например), но самый близкий кто-то пришел к ответу это , которое кажется неполным, и я все равно не понимаю?!?

Ромен сказал это должно было быть исправлено в Froyo и далее, но я использую Honeycomb, и, как вы можете видеть на скриншотах, он не работает. Любой совет будет оценен.

Ответы [ 12 ]

43 голосов
/ 01 февраля 2012

Не знаю, нужно ли вам это по-прежнему, но есть способ. Я сам боролся с этим вопросом. В итоге я сделал что-то вроде этого:

((Spinner) spinner).getSelectedView().setEnabled(false);
spinner.setEnabled(false);

На самом деле это отключает счетчик и выбранный элемент, который отображается. Скорее всего, выбранный элемент является TextView , и он должен отображаться как отключенный TextView.

Я использую это, и это работает. Но по какой-то неизвестной мне причине он не такой «затененный», как другие отключенные представления. Это все еще выглядит отключенным, хотя. Попробуйте.

5 голосов
/ 13 июня 2017

Один умный способ сделать так, чтобы вращатели выглядели отключенными, это снизить прозрачность.

Spinner spinner = (Spinner) findViewById(R.id.my_spinner);
spinner.setEnabled(false);
spinner.setAlpha(0.5f);
4 голосов
/ 17 декабря 2014

Если вы создаете адаптер с пользовательским макетом (например, расширяющим R.layout.simple_spinner_item), добавьте этот атрибут в XML: android:duplicateParentState="true"

3 голосов
/ 09 января 2013
((Spinner) spnr).getSelectedView().setEnabled(false);
((Spinner) spnr).setEnabled(false);

spnr - это мой Spinner объект, который ссылается на файл представления XML, findViewById(...).

2 голосов
/ 14 ноября 2017

Я попробовал следующее, и оно работает, как я ожидал:

_userMembership.setEnabled(false);
_userMembership.setClickable(false);
_userMembership.setAlpha((float)0.7);
_userMembership.setBackgroundColor(Color.GRAY);
1 голос
/ 04 июня 2015

.getSelectedView() не работал для меня.Поэтому я обманул отключение Spinner до шоу .

Вам нужно определить свои собственные цвета для отключенного вида.

Например:

R.color.blue_text //means enabled
R.color.gray_text //means disabled

Таким образом, чтобы отключить мой счетчик:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.gray_text));
mySpinner.setEnabled(false);
mySpinner.setFocusable(false);

Чтобы включить мой счетчик:

((TextView)mySpinner.getChildAt(0)).setTextColor(getResources().getColor(R.color.blue_text));
mySpinner.setEnabled(true);
mySpinner.setFocusable(true);

Вам не нужно менять стили или модифицировать XML.Просто сделайте это в своем коде, даже в методах события, с вами все будет в порядке.

1 голос
/ 26 июня 2013

это сработало для меня ... Для отключения счетчика

your_spinner.getSelectedView();
your_spinner.setEnabled(false);

и включение обратно

your_spinner.setEnabled(true);
0 голосов
/ 12 февраля 2018

Я считаю, что это лучшее решение того же вопроса, на который ранее ответил @ JSPDeveloper01: https://stackoverflow.com/a/20401876/8041634

Поскольку Android не затеняет счетчик, когда он отключен, он предлагает создать собственный метод, использующий команду .setAlpha на счетчике, которая выделяет текст внутри него. Brilliant.

0 голосов
/ 04 ноября 2016

Вы можете обойтись без набора типов также следующим образом:

new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
             // Depend on your selection check position and disable it
             if(position == 1) {
                view.setEnabled(false);
                view.setEnabled(false);
             }
    }

    @Override
    public void onNothingSelected(AdapterView<?> adapterView) {

    }
 }
0 голосов
/ 08 ноября 2015

У меня была похожая проблема, за исключением того, что getChildView вернул для меня значение null, поэтому исключенное решение не сработало. Я полагаю, что это было вызвано тем, что я установил адаптер в XML, и это игнорировало атрибуты «clickable» и «enabled».

Это был мой XML:

<Spinner
android:id="@+id/my_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_large"
android:alpha="0.86"
android:enabled="false"
android:clickable="false"
android:entries="@array/array_of_entries"
android:spinnerMode="dropdown"/>

Решением для меня было удалить атрибуты «enabled» и «clickable» и поместите следующий код в моем "onCreate"

spinner.setEnabled(false);

Надеюсь, это кому-нибудь поможет!

...