下面列出了android.view.View#getParentForAccessibility ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Determines if the supplied {@link View} has an ancestor which meets the criteria for gaining
* accessibility focus.
*
* <p>NOTE: This method only evaluates ancestors which may be considered important for
* accessibility and explicitly does not evaluate the supplied {@code view}.
*
* @param view The {@link View} to evaluate
* @return {@code true} if an ancestor of {@code view} may gain accessibility focus, {@code false}
* otherwise
*/
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN) // Calls View#getParentForAccessibility
private static boolean hasFocusableAncestor(View view) {
if (view == null) {
return false;
}
ViewParent parent = view.getParentForAccessibility();
if (!(parent instanceof View)) {
return false;
}
if (isAccessibilityFocusable((View) parent)) {
return true;
}
return hasFocusableAncestor((View) parent);
}
/**
* Determines if the supplied {@link View} is a top-level item within a scrollable container.
*
* @param view The {@link View} to evaluate
* @return {@code true} if {@code view} is a top-level view within a scrollable container, {@code
* false} otherwise
*/
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN) // Calls View#getParentForAccessibility
private static boolean isChildOfScrollableContainer(View view) {
if (view == null) {
return false;
}
ViewParent viewParent = view.getParentForAccessibility();
if ((viewParent == null) || !(viewParent instanceof View)) {
return false;
}
View parent = (View) viewParent;
if (parent.isScrollContainer()) {
return true;
}
// Specifically check for parents that are AdapterView, ScrollView, or HorizontalScrollView, but
// exclude Spinners, which are a special case of AdapterView.
return (((parent instanceof AdapterView)
|| (parent instanceof ScrollView)
|| (parent instanceof HorizontalScrollView))
&& !(parent instanceof Spinner));
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {
if (CAN_HIDE_DESCENDANTS) {
super.onInitializeAccessibilityNodeInfo(host, info);
} else {
// Obtain a node for the host, then manually generate the list
// of children to only include non-obscured views.
final AccessibilityNodeInfo superNode = AccessibilityNodeInfo.obtain(info);
super.onInitializeAccessibilityNodeInfo(host, superNode);
info.setSource(host);
final ViewParent parent = host.getParentForAccessibility();
if (parent instanceof View) {
info.setParent((View) parent);
}
copyNodeInfoNoChildren(info, superNode);
superNode.recycle();
addChildrenForAccessibility(info, (ViewGroup) host);
}
info.setClassName(DrawerLayout.class.getName());
// This view reports itself as focusable so that it can intercept
// the back button, but we should prevent this view from reporting
// itself as focusable to accessibility services.
info.setFocusable(false);
info.setFocused(false);
if (C.API_LOLLIPOP) {
info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_FOCUS);
info.removeAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_CLEAR_FOCUS);
}
}
public static ViewParent getParentForAccessibility(View view) {
return view.getParentForAccessibility();
}
public static ViewParent e(View view)
{
return view.getParentForAccessibility();
}
public static ViewParent getParentForAccessibility(View view) {
return view.getParentForAccessibility();
}
public static ViewParent getParentForAccessibility(View view) {
return view.getParentForAccessibility();
}
public static ViewParent getParentForAccessibility(View view) {
return view.getParentForAccessibility();
}
public static ViewParent getParentForAccessibility(View view) {
return view.getParentForAccessibility();
}