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


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

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

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

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

6 61

6 ответов:

что это значит?

цитирую страница Википедии для "GUI widget":

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

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

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

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

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

что делает a Button смотрите и отвечайте как Button - Это его фон, который является StateListDrawable. Существует определенный образ, используемый для отключенного состояния.

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

как сказал Дилип, 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();
  }
});

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

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

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

setClickable public void setClickable (boolean clickable)

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

setEnabled public void setEnabled (boolean enabled)

Он установил включенное состояние этого представления .Если для конкретного представления задано значение enabled, то передайте true в параметре еще передайте false