【发布时间】:2011-12-19 01:22:26
【问题描述】:
我查看了http://developer.android.com/reference/android/view/View.html 以找出差异,但不能理解太多。我只是部分理解了“选择”状态。
有人可以用一些可靠的例子来解释这些差异吗?我希望我的问题不是很模糊。如果是的话,如果有人可以帮助我改进它会很棒,因为我不知道如何更清楚地问它。
提前谢谢你。
【问题讨论】:
我查看了http://developer.android.com/reference/android/view/View.html 以找出差异,但不能理解太多。我只是部分理解了“选择”状态。
有人可以用一些可靠的例子来解释这些差异吗?我希望我的问题不是很模糊。如果是的话,如果有人可以帮助我改进它会很棒,因为我不知道如何更清楚地问它。
提前谢谢你。
【问题讨论】:
已启用 -> 可以进行用户交互。
已禁用 -> 无法进行用户交互。
【讨论】:
Focused - (Window, View) 是键盘事件的目的地(是的,有些 Android 具有物理键盘),有些具有“除臭球”,可生成左上右下箭头键盘快捷键。
已激活 - 已激活的小部件(视图)。例如。在多选列表中,选定的视图被激活。我相信 API 11 中这个额外阶段的必要性是由于激活了包含复选框的多选。因此选择和检查状态需要分开。
Selected - 仅适用于复选框和其他可选视图。
View states 的完整列表是(左边是StateSet id,右边是flag):
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)
【讨论】: