ViewParent 被 View 实现 ViewGroup继承 View;
一 ViewParent的全部方法
1.1 requestLayout()
public void requestLayout();
当某些内容发生更改而导致此视图父级的子级布局无效时调用。这将安排视图树的布局传递。
1.2 isLayoutRequested()
public boolean isLayoutRequested();
指示是否在此视图父级上请求了布局。返回:如果请求布局,则返回 true,否则返回 false.
1.3 onDescendantInvalidated()
default void onDescendantInvalidated(@NonNull View child, @NonNull View target) {
if (getParent() !=null) {
// Note: should pass 'this' as default, but can't since we may not be a View
getParent().onDescendantInvalidated(child, target);
}
}
目标视图已失效,或更改了需要重新渲染层次结构的绘图属性。 View 层次结构调用此方法以向祖先发出信号,即 View 需要重新记录其绘图命令,或者绘图属性已更改。这就是视图如何安排绘图遍历。这个信号通常只为附加的视图发送,因为只有它们需要绘制。 Params: child - 此 ViewParent 的直接子级包含目标 target - 需要红色的视图
1.4 @Deprecatedpublic void invalidateChild(View child, Rect r);
孩子的全部或部分是脏的,需要重新绘制。
1.5 @Deprecatedpublic ViewParent invalidateChildInParent(int[] location, Rect r);
孩子的全部或部分是脏的,需要重新绘制。 location 数组是一个包含两个 int 值的数组,它们分别定义了脏孩子的左侧和顶部位置。如果指定的矩形必须在父级中无效,则此方法必须返回此 ViewParent 的父级。如果指定的矩形不需要在父级中失效或父级不存在,则此方法必须返回 null。当此方法返回非空值时,位置数组必须已使用此 ViewParent 的左坐标和上坐标进行了更新。
1.6 public ViewParent getParent();
如果父级存在,则返回父级,否则返回 null。
1.7 public void requestChildFocus(View child, View focused);
当子view 需要获取焦点的时候调用
1.8 public void recomputeViewAttributes(View child);
需要重新计算视图属性。
Params: child – 属性已更改的视图。
1.9public void clearChildFocus(View child);
移除子视图的焦点
1.10 public boolean getChildVisibleRect(View child, Rect r, android.graphics.Point offset);
获取子视图的可见矩形
计算根据子视图坐标定义的矩形区域的可见部分。返回矩形 r 的裁剪可见部分,在子局部坐标系中定义。 r 被此方法修改以包含结果,以全局(根)坐标系表示。.生成的矩形始终是轴对齐的。如果将旋转应用于视图层次结构中的节点,则结果是可见矩形的轴对齐边界框。参数:child – 一个子视图,我们要计算其矩形可见区域 r – 输入矩形,在子坐标系中定义。将被覆盖以包含生成的可见矩形,以全局(根)坐标表示 offset – 点的输入坐标,在子坐标系中定义。与 r 参数一样,这将被覆盖以包含该点的全局(根)坐标。空值有效(如果您对此结果不感兴趣) 返回:如果结果矩形不为空,则返回 true,否则返回 false
1.11 public View focusSearch(View v, int direction);
在指定方向上找到最近的要获得焦点的视图
direction – One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT
1.12 View keyboardNavigationClusterSearch(View currentCluster,int direction);
键盘导航集群搜索
查找指定方向最近的键盘导航簇。这实际上并没有关注该集群。
currentCluster搜索的起点。 Null 表示当前集群尚未找到
返回:指定方向上最近的键盘导航簇,如果找不到,则返回 null
1.13 public void bringChildToFront(View child);
更改子项的 z 顺序,使其位于所有其他子项之上。如果此容器使用与顺序相关的布局方案(例如,LinearLayout),则此排序更改可能会影响布局。在 android.os.Build.VERSION_CODES.KITKAT 之前,此方法之后应调用此父级上的 requestLayout() 和 View.invalidate() 以强制父级使用新的子级排序重绘。
1.14 public void focusableViewAvailable(View v);
告诉父级有一个新的可聚焦视图可用。这是为了处理从没有可聚焦视图的情况到出现第一个可聚焦视图的情况的转换
1.15 public boolean showContextMenuForChild(View originalView);
显示子视图的上下文菜单
显示指定视图或其祖先的上下文菜单。在大多数情况下,子类不需要覆盖它。但是,如果子类直接添加到窗口管理器(例如,ViewManager.addView(View, ViewGroup.LayoutParams)),那么它应该覆盖它并显示上下文菜单。
originalView – 首次调用上下文菜单的源视图
return 如果显示上下文菜单,则为 true,否则为 false