我很难理解 "descendantFocusability",尤其是 "afterDescendants"。有人能给我一个使用时的例子吗?
定义了当查找要获得焦点的视图时,ViewGroup
和其后代之间的关系。
必须是以下常量值之一。
+------------------------------------------------------------------------------------------+ | 常量名 值 描述 | +------------------------------------------------------------------------------------------+ | afterDescendants 1 只有当没有子项想要获取焦点时,ViewGroup才会获取焦点。 | +------------------------------------------------------------------------------------------+ | beforeDescendants 0 在任何子项之前,ViewGroup将获取焦点。 | +------------------------------------------------------------------------------------------+ | blocksDescendants 2 ViewGroup将阻止其子项接收焦点。 | +------------------------------------------------------------------------------------------+
您可以在此处查看完整示例。
代码片段:
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
ListView listView = getListView();
Log.d(TAG, "onItemSelected gave us " + view.toString());
Button b = (Button) view.findViewById(R.id.button);
EditText et = (EditText) view.findViewById(R.id.editor);
if (b != null || et != null) {
// Use afterDescendants to keep ListView from getting focus
listView.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);
if(et!=null) et.requestFocus();
else if(b!=null) b.requestFocus();
} else {
if (!listView.isFocused()) {
// Use beforeDescendants so that previous selections don't re-take focus
listView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
listView.requestFocus();
}
}
}
afterDescendants
被用来防止listview
获得焦点,以便EditText
或Button
可以请求焦点。