android: в чем разница между сфокусированным, включенным, нажатым и выбранным состояниями?

#android #view

#Android #Вид

Вопрос:

Я посмотрел на http://developer.android.com/reference/android/view/View.html чтобы разобраться в различиях, но многого понять не смог. Я лишь частично понял «выбранное» состояние.

Может ли кто-нибудь объяснить различия на нескольких убедительных примерах? Надеюсь, мой вопрос не очень расплывчатый. Если это так, было бы здорово, если бы кто-нибудь помог мне улучшить его, потому что я не знаю, как задать его более четко.

Заранее благодарю вас.

Ответ №1:

Включено -> Возможно взаимодействие с пользователем.

Отключено -> Взаимодействие с пользователем невозможно.

  • при наведении курсора мыши на виджет он фокусируется
  • Если вы нажмете (наполовину щелкните) на этом виджете, он будет нажат
  • Если вы нажимаете «вниз» и «вверх», пока мышь находится в одном и том же положении, она выбрана

Комментарии:

1. Спасибо за разъяснение! Я все еще не понимаю, что такое «сфокусировано»: как работает сфокусированное состояние на сенсорном экране? Это что-то вроде: когда я провожу пальцем по экрану и где бы ни находился мой палец в любой конкретный момент, эта часть экрана находится в фокусе?

2. Но при сенсорном вводе вам обычно нужно заботиться только о выбранном состоянии, верно? @EnginYapici Я думаю, что текстовое поле фокусируется, когда оно ожидает ввода.

3. при сенсорном вводе вам нужно позаботиться о нажатых и выбранных состояниях. если касание происходит внутри виджета, а касание происходит вне виджета, оно не считается выбранным.

4. На самом деле фокусировка применима и к сенсорному интерфейсу. Если у вас есть несколько полупрозрачных представлений, перекрывающихся на экране (например, фрагменты), применимы все парадигмы рабочего стола. Кроме того, новые устройства Android оснащены датчиком приближения, что делает «наведение курсора» снова значимым даже без мыши. Нажатие / выбранное включение / отключение — это упрощение.

Ответ №2:

Focused — (Window, View) является местом назначения событий клавиатуры (да, у некоторых андроидов есть физическая клавиатура), а у некоторых есть «дезодорант-шарик», генерирующий сочетания клавиш со стрелками влево вверх вправо вниз.

Активирован — активированный виджет (вид). Например. в списке множественного выбора активируются выбранные виды. Я считаю, что необходимость этого дополнительного этапа в API 11 была вызвана активацией множественного выбора, который содержит флажки. Таким образом, выбранные и отмеченные состояния должны быть разделены.

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

Полный список состояний просмотра (идентификатор набора состояний слева, флаг справа):

     R.attr.state_window_focused,    VIEW_STATE_WINDOW_FOCUSED,
    R.attr.state_selected,          VIEW_STATE_SELECTED,
    R.attr.state_focused,           VIEW_STATE_FOCUSED,
    R.attr.state_enabled,           VIEW_STATE_ENABLED,
    R.attr.state_pressed,           VIEW_STATE_PRESSED,
    R.attr.state_activated,         VIEW_STATE_ACTIVATED,
    R.attr.state_accelerated,       VIEW_STATE_ACCELERATED,
    R.attr.state_hovered,           VIEW_STATE_HOVERED,
    R.attr.state_drag_can_accept,   VIEW_STATE_DRAG_CAN_ACCEPT,
    R.attr.state_drag_hovered,      VIEW_STATE_DRAG_HOVERED
 

Также смотрите:

 /**
 * Changes the activated state of this view. A view can be activated or not.
 * Note that activation is not the same as selection.  Selection is
 * a transient property, representing the view (hierarchy) the user is
 * currently interacting with.  Activation is a longer-term state that the
 * user can move views in and out of.  For example, in a list view with
 * single or multiple selection enabled, the views in the current selection
 * set are activated.  (Um, yeah, we are deeply sorry about the terminology
 * here.)  The activated state is propagated down to children of the view it
 * is set on.
 *
 * @param activated true if the view must be activated, false otherwise
 */
public void setActivated(boolean activated)



/**
 * Dispatch a key event to the next view on the focus path. This path runs
 * from the top of the view tree down to the currently focused view. If this
 * view has focus, it will dispatch to itself. Otherwise it will dispatch
 * the next node down the focus path. This method also fires any key
 * listeners.
 *
 * @param event The key event to be dispatched.
 * @return True if the event was handled, false otherwise.
 */
public boolean dispatchKeyEvent(KeyEvent event)
 

Комментарии:

1. Хм, да, мы глубоко сожалеем о терминологии здесь. 🐙