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

SetEnabled() vs setClickable(), в чем разница?

До сих пор, когда я хотел button.setClickable(false); пользователю нажимать кнопку, я устанавливал button.setClickable(false); и обычно меняют текст на какой-то серый цвет (чтобы пользователь знал, что кнопка отключена). Сегодня я наткнулся на setEnabled().

Итак, я пошел к документации, чтобы увидеть объяснение метода ниже:

setEnabled(boolean enabled)
   Set the enabled state of this view.

Что это вообще значит? В чем разница между состоянием включения/кликабельным состоянием и отключенным состоянием/не кликабельным состоянием? Может кто-нибудь объяснить, в чем разница между тем, что я делал ранее, с использованием свойства clickable и с помощью setEnabled()? Что следует использовать, когда? Я искал переполнение стека, но не смог найти ничего связанного.

4b9b3361

Ответ 1

Что, черт возьми, это значит?

Цитата на странице Википедии "Виджет GUI" :

В контексте приложения виджет может быть включен или отключен в данный момент времени. Разрешенный виджет имеет возможность реагировать на события, такие как нажатия клавиш или действия с мышью. Виджет, который не может реагировать на такие события, считается отключенным. Внешний вид отключенного виджета обычно отличается от включенного виджета; отключенный виджет может быть нарисован более светлым цветом или может быть визуально закрыт каким-то образом. См. Изображение справа для примера.

Эта концепция существует уже несколько десятилетий и может быть найдена в большинстве графических интерфейсов.

В чем разница между включенным состоянием/кликабельным состоянием и отключенным состоянием/не кликабельным состоянием?

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

что вы подразумеваете под: ".. поскольку это делает кнопку визуально" отключенной "? Как она визуально меняет ее?

Что делает внешний вид Button и отвечает как Button, это его фон, который является StateListDrawable. Для отключенного состояния используется определенное изображение.

Ответ 2

Так что в основном включенное false не отвечает на любой ответ и кликабельный ложный по-прежнему ответ, когда он установлен во время выполнения и доверяет мне, я просто попробовал его.

Ответ 3

Как сказал Дилипп, setClickable не работает, если он установлен во время выполнения. Вот трюк, чтобы заставить его работать:

ToggleButton toggle = ...
toggle.setOnTouchListener(new ToggleButton.OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
     // If true is returned, the event is eated by the TouchListener
     return !v.isClickable();
  }
});

Ответ 4

Представления могут также реагировать на внешние клавиатуры, направляющие пэды (удаленные/игровые контроллеры) и вспомогательные устройства (switch, устройства чтения с экрана).

Ответ 5

Отличия указаны выше, но есть подсказка. используйте setClickable() после setOnClickListener(). Из-за этого:

public void setOnClickListener(@Nullable OnClickListener l) {
    if (!isClickable()) {
        setClickable(true);
    }
    getListenerInfo().mOnClickListener = l;
}

Ответ 6

setClickable public void setClickable (логический кликабельный)

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

setEnabled public void setEnabled (логическое значение включено)

Это установило включенное состояние этого представления. Если определенное представление установлено, чтобы быть включенным, тогда передайте true в параметре, иначе передайте false

Ответ 7

Большая разница, которую я не вижу в другом месте, связана с перекрывающимися представлениями. Вид с clickable = true и enabled = false не позволит вам нажать вид позади него. Но View с clickable = false позволит вам нажать View позади него.