public abstract class ViewGroup
extends View
implements ViewParent, ViewManager
java.lang.Object | ||
↳ | android.view.View | |
↳ | android.view.ViewGroup |
Known Direct Subclasses |
Known Indirect Subclasses |
ViewGroup
是一个可包含其他视图(称为子视图)的特殊视图。视图组是布局和视图容器的基类。 该类还定义了用作布局参数基类的ViewGroup.LayoutParams
类。
有关布局属性,请参阅 ViewGroup.LayoutParams
。
有关创建用户界面布局的更多信息,请阅读 XML Layouts开发人员指南。
下面是一个自定义ViewGroup的完整实现,它实现了一个简单的 FrameLayout
以及在左右排水沟中堆叠儿童的能力。
import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.RemoteViews; /** * Example of writing a custom layout manager. This is a fairly full-featured * layout manager that is relatively general, handling all layout cases. You * can simplify it for more specific cases. */ @RemoteViews.RemoteView public class CustomLayout extends ViewGroup { /** The amount of space used by children in the left gutter. */ private int mLeftWidth; /** The amount of space used by children in the right gutter. */ private int mRightWidth; /** These are used for computing child frames based on their gravity. */ private final Rect mTmpContainerRect = new Rect(); private final Rect mTmpChildRect = new Rect(); public CustomLayout(Context context) { super(context); } public CustomLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CustomLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } /** * Any layout manager that doesn't scroll will want this. */ @Override public boolean shouldDelayChildPressedState() { return false; } /** * Ask all children to measure themselves and compute the measurement of this * layout based on the children. */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = getChildCount(); // These keep track of the space we are using on the left and right for // views positioned there; we need member variables so we can also use // these for layout later. mLeftWidth = 0; mRightWidth = 0; // Measurement will ultimately be computing these values. int maxHeight = 0; int maxWidth = 0; int childState = 0; // Iterate through all children, measuring them and computing our dimensions // from their size. for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child.getVisibility() != GONE) { // Measure the child. measureChildWithMargins(child, widthMeasureSpec, 0, heightMeasureSpec, 0); // Update our size information based on the layout params. Children // that asked to be positioned on the left or right go in those gutters. final LayoutParams lp = (LayoutParams) child.getLayoutParams(); if (lp.position == LayoutParams.POSITION_LEFT) { mLeftWidth += Math.max(maxWidth, child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin); } else if (lp.position == LayoutParams.POSITION_RIGHT) { mRightWidth += Math.max(maxWidth, child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin); } else { maxWidth = Math.max(maxWidth, child.getMeasuredWidth() + lp.leftMargin + lp.rightMargin); } maxHeight = Math.max(maxHeight, child.getMeasuredHeight() + lp.topMargin + lp.bottomMargin); childState = combineMeasuredStates(childState, child.getMeasuredState()); } } // Total width is the maximum width of all inner children plus the gutters. maxWidth += mLeftWidth + mRightWidth; // Check against our minimum height and width maxHeight = Math.max(maxHeight, getSuggestedMinimumHeight()); maxWidth = Math.max(maxWidth, getSuggestedMinimumWidth()); // Report our final dimensions. setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, childState), resolveSizeAndState(maxHeight, heightMeasureSpec, childState << MEASURED_HEIGHT_STATE_SHIFT)); } /** * Position all children within this layout. */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { final int count = getChildCount(); // These are the far left and right edges in which we are performing layout. int leftPos = getPaddingLeft(); int rightPos = right - left - getPaddingRight(); // This is the middle region inside of the gutter. final int middleLeft = leftPos + mLeftWidth; final int middleRight = rightPos - mRightWidth; // These are the top and bottom edges in which we are performing layout. final int parentTop = getPaddingTop(); final int parentBottom = bottom - top - getPaddingBottom(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child.getVisibility() != GONE) { final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final int width = child.getMeasuredWidth(); final int height = child.getMeasuredHeight(); // Compute the frame in which we are placing this child. if (lp.position == LayoutParams.POSITION_LEFT) { mTmpContainerRect.left = leftPos + lp.leftMargin; mTmpContainerRect.right = leftPos + width + lp.rightMargin; leftPos = mTmpContainerRect.right; } else if (lp.position == LayoutParams.POSITION_RIGHT) { mTmpContainerRect.right = rightPos - lp.rightMargin; mTmpContainerRect.left = rightPos - width - lp.leftMargin; rightPos = mTmpContainerRect.left; } else { mTmpContainerRect.left = middleLeft + lp.leftMargin; mTmpContainerRect.right = middleRight - lp.rightMargin; } mTmpContainerRect.top = parentTop + lp.topMargin; mTmpContainerRect.bottom = parentBottom - lp.bottomMargin; // Use the child's gravity and size to determine its final // frame within its container. Gravity.apply(lp.gravity, width, height, mTmpContainerRect, mTmpChildRect); // Place the child. child.layout(mTmpChildRect.left, mTmpChildRect.top, mTmpChildRect.right, mTmpChildRect.bottom); } } } // ---------------------------------------------------------------------- // The rest of the implementation is for custom per-child layout parameters. // If you do not need these (for example you are writing a layout manager // that does fixed positioning of its children), you can drop all of this. @Override public LayoutParams generateLayoutParams(AttributeSet attrs) { return new CustomLayout.LayoutParams(getContext(), attrs); } @Override protected LayoutParams generateDefaultLayoutParams() { return new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); } @Override protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) { return new LayoutParams(p); } @Override protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { return p instanceof LayoutParams; } /** * Custom per-child layout information. */ public static class LayoutParams extends MarginLayoutParams { /** * The gravity to apply with the View to which these layout parameters * are associated. */ public int gravity = Gravity.TOP | Gravity.START; public static int POSITION_MIDDLE = 0; public static int POSITION_LEFT = 1; public static int POSITION_RIGHT = 2; public int position = POSITION_MIDDLE; public LayoutParams(Context c, AttributeSet attrs) { super(c, attrs); // Pull the layout param values from the layout XML during // inflation. This is not needed if you don't care about // changing the layout behavior in XML. TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.CustomLayoutLP); gravity = a.getInt(R.styleable.CustomLayoutLP_android_layout_gravity, gravity); position = a.getInt(R.styleable.CustomLayoutLP_layout_position, position); a.recycle(); } public LayoutParams(int width, int height) { super(width, height); } public LayoutParams(ViewGroup.LayoutParams source) { super(source); } } }
如果您正在实现示例中所示的XML布局属性,则这将是 res/values/attrs.xml
的相应定义:
<declare-styleable name="CustomLayoutLP"> <attr name="android:layout_gravity" /> <attr name="layout_position"> <enum name="middle" value="0" /> <enum name="left" value="1" /> <enum name="right" value="2" /> </attr> </declare-styleable>
最后,布局管理器可以在XML布局中使用,如下所示:
<com.example.android.apis.view.CustomLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.example.android.apis" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- put first view to left. --> <TextView android:background="@drawable/filled_box" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_position="left" android:layout_gravity="fill_vertical|center_horizontal" android:text="l1"/> <!-- stack second view to left. --> <TextView android:background="@drawable/filled_box" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_position="left" android:layout_gravity="fill_vertical|center_horizontal" android:text="l2"/> <!-- also put a view on the right. --> <TextView android:background="@drawable/filled_box" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_position="right" android:layout_gravity="fill_vertical|center_horizontal" android:text="r1"/> <!-- by default views go in the middle; use fill vertical gravity --> <TextView android:background="@drawable/green" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="fill_vertical|center_horizontal" android:text="fill-vert"/> <!-- by default views go in the middle; use fill horizontal gravity --> <TextView android:background="@drawable/green" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|fill_horizontal" android:text="fill-horiz"/> <!-- by default views go in the middle; use top-left gravity --> <TextView android:background="@drawable/blue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top|left" android:text="top-left"/> <!-- by default views go in the middle; use center gravity --> <TextView android:background="@drawable/blue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="center"/> <!-- by default views go in the middle; use bottom-right --> <TextView android:background="@drawable/blue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:text="bottom-right"/> </com.example.android.apis.view.CustomLayout>
Nested classes |
|
---|---|
class |
ViewGroup.LayoutParams LayoutParams被视图用来告诉他们的父母他们想如何摆放。 |
class |
ViewGroup.MarginLayoutParams 支持边距的布局的每个子布局信息。 |
interface |
ViewGroup.OnHierarchyChangeListener 在此视图中的层次结构发生变化时调用回调的接口定义。 |
XML attributes |
|
---|---|
android:addStatesFromChildren |
Sets whether this ViewGroup's drawable states also include its children's drawable states. |
android:alwaysDrawnWithCache |
Defines whether the ViewGroup should always draw its children using their drawing cache or not. |
android:animateLayoutChanges |
Defines whether changes in layout (caused by adding and removing items) should cause a LayoutTransition to run. |
android:animationCache |
Defines whether layout animations should create a drawing cache for their children. |
android:clipChildren |
Defines whether a child is limited to draw inside of its bounds or not. |
android:clipToPadding |
Defines whether the ViewGroup will clip its children and resize (but not clip) any EdgeEffect to its padding, if padding is not zero. |
android:descendantFocusability |
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus. |
android:layoutAnimation |
Defines the layout animation to use the first time the ViewGroup is laid out. |
android:layoutMode |
Defines the layout mode of this ViewGroup. |
android:persistentDrawingCache |
Defines the persistence of the drawing cache. |
android:splitMotionEvents |
Sets whether this ViewGroup should split MotionEvents to separate child views during touch event dispatch. |
Inherited XML attributes |
|
---|---|
From class android.view.View
|
Constants |
|
---|---|
int |
CLIP_TO_PADDING_MASK 当FLAG_CLIP_TO_PADDING和FLAG_PADDING_NOT_NULL同时设置时,我们剪裁为填充。 |
int |
FOCUS_AFTER_DESCENDANTS 只有当它的后代都不需要它时,这个视图才会得到关注。 |
int |
FOCUS_BEFORE_DESCENDANTS 这个观点将在它的任何后代之前得到关注。 |
int |
FOCUS_BLOCK_DESCENDANTS 这种观点将阻止其后代的任何焦点,即使它们是可以聚焦的。 |
int |
LAYOUT_MODE_CLIP_BOUNDS 这个常数是 |
int |
LAYOUT_MODE_OPTICAL_BOUNDS 这个常数是 |
int |
PERSISTENT_ALL_CACHES 用于指示所有绘图缓存应保存在内存中。 |
int |
PERSISTENT_ANIMATION_CACHE 用于指示动画制图缓存应保存在内存中。 |
int |
PERSISTENT_NO_CACHE 用于指示绘图缓存不应保存在内存中。 |
int |
PERSISTENT_SCROLLING_CACHE 用于指示滚动图形缓存应保存在内存中。 |
Inherited constants |
---|
From class android.view.View
|
Inherited fields |
---|
From class android.view.View
|
Public constructors |
|
---|---|
ViewGroup(Context context) |
|
ViewGroup(Context context, AttributeSet attrs) |
|
ViewGroup(Context context, AttributeSet attrs, int defStyleAttr) |
|
ViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) |
Public methods |
|
---|---|
void |
addChildrenForAccessibility(ArrayList<View> outChildren) 将此视图的子项添加到给定列表的可访问性中作为输出。 |
void |
addFocusables(ArrayList<View> views, int direction, int focusableMode) 将视图后代的任何可聚焦视图添加到视图中(可能包括该视图,如果它本身是可聚焦的话)。 |
boolean |
addStatesFromChildren() 返回此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 |
void |
addTouchables(ArrayList<View> views) 添加这个视图的后代的任何可触摸的视图(如果它可以自己触摸,可能包括这个视图)到视图。 |
void |
addView(View child, ViewGroup.LayoutParams params) 添加具有指定布局参数的子视图。 |
void |
addView(View child, int index) 添加子视图。 |
void |
addView(View child, int index, ViewGroup.LayoutParams params) 添加具有指定布局参数的子视图。 |
void |
addView(View child) 添加子视图。 |
void |
addView(View child, int width, int height) 使用此ViewGroup的默认布局参数和指定的宽度和高度添加子视图。 |
void |
bringChildToFront(View child) 更改孩子的z顺序,使其位于所有其他孩子的顶部。 |
void |
childDrawableStateChanged(View child) 如果 |
void |
childHasTransientStateChanged(View child, boolean childHasTransientState) 当子视图发生变化时调用,无论它是否跟踪瞬态。 |
void |
clearChildFocus(View child) 当该父母的一个孩子放弃焦点时调用 |
void |
clearDisappearingChildren() 删除已删除的视图的任何待定动画。 |
void |
clearFocus() 当这个观点想要放弃焦点时调用。 |
WindowInsets |
dispatchApplyWindowInsets(WindowInsets insets) 请求将给定的窗口插件应用于此视图或其子视图中的其他视图。 |
void |
dispatchConfigurationChanged(Configuration newConfig) 在视图层次结构下分发有关资源配置更改的通知。 |
void |
dispatchDisplayHint(int hint) 发出是否显示此视图的提示。 |
boolean |
dispatchDragEvent(DragEvent event) 检测此视图是否已启用并具有拖动事件侦听器。 |
void |
dispatchDrawableHotspotChanged(float x, float y) 将可绘制的热点更改分派到满足以下至少一个条件的子视图:
|
boolean |
dispatchKeyEvent(KeyEvent event) 将关键事件分派到焦点路径上的下一个视图。 |
boolean |
dispatchKeyEventPreIme(KeyEvent event) 在与视图层次关联的任何输入方法处理关键事件之前分派关键事件。 |
boolean |
dispatchKeyShortcutEvent(KeyEvent event) 分派键快捷键事件。 |
void |
dispatchProvideStructure(ViewStructure structure) 在层次结构中分派创建 |
void |
dispatchSetActivated(boolean activated) 派发setActivated给所有这个View的孩子。 |
void |
dispatchSetSelected(boolean selected) 调度setSelected选择到所有这个View的孩子。 |
void |
dispatchSystemUiVisibilityChanged(int visible) 向视图层次结构调度回调到 |
boolean |
dispatchTouchEvent(MotionEvent ev) 将触摸屏动作事件向下传递给目标视图,或者将此视图作为目标。 |
boolean |
dispatchTrackballEvent(MotionEvent event) 将轨迹球运动事件传递给焦点视图。 |
boolean |
dispatchUnhandledMove(View focused, int direction) 此方法是聚焦视图及其祖先响应箭头键的最后机会。 |
void |
dispatchWindowFocusChanged(boolean hasFocus) 当包含此视图的窗口获得或失去窗口焦点时调用。 |
void |
dispatchWindowSystemUiVisiblityChanged(int visible) 向视图层次结构调度回调到 |
void |
dispatchWindowVisibilityChanged(int visibility) 向视图层次结构中分派窗口可见性更改。 |
void |
endViewTransition(View view) 此方法应始终在先调用 |
View |
findFocus() 在当前拥有焦点的此视图中植根的层次结构中查找视图。 |
void |
findViewsWithText(ArrayList<View> outViews, CharSequence text, int flags) 查找包含给定文本的视图。 |
View |
focusSearch(View focused, int direction) 在指定的方向查找想要聚焦的最近视图。 |
void |
focusableViewAvailable(View v) 告诉家长,新的可调焦视图已经可用。 |
boolean |
gatherTransparentRegion(Region region) 当视图层次结构包含一个或多个SurfaceView时,RootView将使用它来执行优化。 |
ViewGroup.LayoutParams |
generateLayoutParams(AttributeSet attrs) 根据提供的属性集返回一组新的布局参数。 |
CharSequence |
getAccessibilityClassName() 返回此对象的类名称以用于辅助功能。 |
View |
getChildAt(int index) 返回组中指定位置的视图。 |
int |
getChildCount() 返回组中的子女数量。 |
static int |
getChildMeasureSpec(int spec, int padding, int childDimension) measureChildren的难点在于:搞清楚MeasureSpec传递给特定的孩子。 |
boolean |
getChildVisibleRect(View child, Rect r, Point offset) 计算根据子视图坐标定义的矩形区域的可见部分。 |
boolean |
getClipChildren() 返回绘制前是否将该组的子项剪切到其边界。 |
boolean |
getClipToPadding() 返回此ViewGroup是否将其子项剪裁为其填充,并且如果存在填充,则将任何EdgeEffect调整大小(但不剪切)到填充区域。 |
int |
getDescendantFocusability() 获取此视图组的后代可聚焦性。 |
View |
getFocusedChild() 返回此视图的重点子项(如果有)。 |
LayoutAnimationController |
getLayoutAnimation() 返回用于动画组的子节点的布局动画控制器。 |
Animation.AnimationListener |
getLayoutAnimationListener() 返回布局动画事件发送到的动画侦听器。 |
int |
getLayoutMode() 返回此ViewGroup布局操作期间的对齐基础: |
LayoutTransition |
getLayoutTransition() 获取此ViewGroup的LayoutTransition对象。 |
int |
getNestedScrollAxes() 返回此ViewGroup的嵌套滚动的当前轴。 |
ViewGroupOverlay |
getOverlay() 返回此视图组的ViewGroupOverlay,如果它尚不存在,则创建它。 |
int |
getPersistentDrawingCache() 返回一个整数,指示将哪些类型的绘图缓存保存在内存中。 |
boolean |
getTouchscreenBlocksFocus() 检查此ViewGroup是否应忽略本身及其子项的焦点请求。 |
boolean |
hasFocus() 如果此视图具有或包含焦点,则返回true |
boolean |
hasFocusable() 如果此视图是可聚焦的,或者它包含可访问的视图, |
boolean |
hasTransientState() 指示视图当前是否跟踪暂时状态,即应用程序不需要关心保存和还原,但是框架应该特别注意在可能的情况下保留。 |
int |
indexOfChild(View child) 返回指定子视图的组中的位置。 |
final void |
invalidateChild(View child, Rect dirty) 不要调用或重写此方法。 |
ViewParent |
invalidateChildInParent(int[] location, Rect dirty) 不要调用或重写此方法。 |
boolean |
isAlwaysDrawnWithCacheEnabled() 此方法在API级别23中已弃用。从 |
boolean |
isAnimationCacheEnabled() 此方法在API级别23中已弃用。从 |
boolean |
isMotionEventSplittingEnabled() 如果派发到此ViewGroup的MotionEvent可以分割为多个子项,则返回true。 |
boolean |
isTransitionGroup() 如果在执行活动转换时应将此ViewGroup视为要删除的单个实体,则返回true。 |
void |
jumpDrawablesToCurrentState() 在与此视图关联的所有可绘制对象上调用 |
final void |
layout(int l, int t, int r, int b) 为视图及其所有后代指定大小和位置 这是布局机制的第二阶段。 |
void |
notifySubtreeAccessibilityStateChanged(View child, View source, int changeType) 通知视图父级其子元素的可访问性状态已发生变化,并且子树的结构不同。 |
final void |
offsetDescendantRectToMyCoords(View descendant, Rect rect) 将位于后代坐标空间中的矩形偏移到我们的坐标空间中。 |
final void |
offsetRectIntoDescendantCoords(View descendant, Rect rect) 将坐标空间中的矩形偏移到祖先的坐标空间中。 |
boolean |
onInterceptHoverEvent(MotionEvent event) 实现此方法以在由子视图处理悬停事件之前拦截悬停事件。 |
boolean |
onInterceptTouchEvent(MotionEvent ev) 实施此方法来拦截所有触摸屏幕动作事件。 |
boolean |
onNestedFling(View target, float velocityX, float velocityY, boolean consumed) 从嵌套滚动中请求投掷。 |
boolean |
onNestedPreFling(View target, float velocityX, float velocityY) 在目标视图消耗它之前,将其反应为嵌套的拖动。 |
boolean |
onNestedPrePerformAccessibilityAction(View target, int action, Bundle args) 在目标进程处理之前,响应由目标后代视图委托的可访问性操作。 子类应始终调用 |
void |
onNestedPreScroll(View target, int dx, int dy, int[] consumed) 在目标视图占用滚动的一部分之前,对正在进行的嵌套滚动进行处理。 |
void |
onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) 反应到正在进行的嵌套滚动。 |
void |
onNestedScrollAccepted(View child, View target, int axes) 响应成功声明嵌套滚动操作。 |
boolean |
onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) 当一个孩子要求发送一个 |
PointerIcon |
onResolvePointerIcon(MotionEvent event, int pointerIndex) 返回运动事件的指针图标;如果未指定图标,则返回null。 |
boolean |
onStartNestedScroll(View child, View target, int nestedScrollAxes) 响应启动可嵌套滚动操作的后代视图,并在适当的情况下声明嵌套滚动操作。 |
void |
onStopNestedScroll(View child) 反应到嵌套滚动操作结束。 |
void |
onViewAdded(View child) 当新的孩子被添加到这个ViewGroup时调用。 |
void |
onViewRemoved(View child) 当从此ViewGroup中移除子视图时调用。 |
void |
recomputeViewAttributes(View child) 告诉视图层次结构,需要重新评估全局视图属性。 |
void |
removeAllViews() 调用此方法从ViewGroup中删除所有子视图。 |
void |
removeAllViewsInLayout() 由ViewGroup子类调用以从其自身中删除子视图时,它必须首先知道其屏幕大小,然后才能计算它将呈现多少个子视图。 |
void |
removeView(View view) 注意:不要调用此方法 |
void |
removeViewAt(int index) 删除组中指定位置的视图。 |
void |
removeViewInLayout(View view) 在布局过程中删除视图。 |
void |
removeViews(int start, int count) 从组中删除指定范围的视图。 |
void |
removeViewsInLayout(int start, int count) 在布局过程中删除一系列视图。 |
void |
requestChildFocus(View child, View focused) 当这个父母的孩子需要关注时调用 |
boolean |
requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) 当该组的小孩想要将特定矩形定位到屏幕上时调用。 |
void |
requestDisallowInterceptTouchEvent(boolean disallowIntercept) 当孩子不希望这个父母及其祖先用 |
boolean |
requestFocus(int direction, Rect previouslyFocusedRect) 调用此方法可试图将焦点放在特定视图或其后面的某个子视图上,并提供关于焦点来自的方向和特定矩形的提示。 寻找一个观点,重点关注 |
boolean |
requestSendAccessibilityEvent(View child, AccessibilityEvent event) 由小孩打电话要求其父母发送 |
void |
requestTransparentRegion(View child) 当孩子希望视图层次结构收集并向窗口合成器报告透明区域时调用。 |
void |
scheduleLayoutAnimation() 计划布局动画在该视图组的下一个布局通过后播放。 |
void |
setAddStatesFromChildren(boolean addsStates) 设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 |
void |
setAlwaysDrawnWithCacheEnabled(boolean always) 此方法在API级别23中已弃用。从 |
void |
setAnimationCacheEnabled(boolean enabled) 此方法在API级别23中已弃用。从 |
void |
setClipChildren(boolean clipChildren) 默认情况下,在绘制之前,儿童将被剪裁到其边界。 |
void |
setClipToPadding(boolean clipToPadding) 设置此ViewGroup是否将其子对象填充到其填充中,并将存在填充的任何EdgeEffect调整大小(但不剪切)到填充区域。 |
void |
setDescendantFocusability(int focusability) 设置此视图组的后代可聚焦性。 |
void |
setLayoutAnimation(LayoutAnimationController controller) 设置用于在第一个布局之后为组的子项设置动画效果的布局动画控制器。 |
void |
setLayoutAnimationListener(Animation.AnimationListener animationListener) 指定必须向其发送布局动画事件的动画侦听器。 |
void |
setLayoutMode(int layoutMode) 设置此ViewGroup布局过程中的对齐基础。 |
void |
setLayoutTransition(LayoutTransition transition) 为此ViewGroup设置LayoutTransition对象。 |
void |
setMotionEventSplittingEnabled(boolean split) 在触摸事件分派期间启用或禁用将MotionEvents分割为多个子项。 |
void |
setOnHierarchyChangeListener(ViewGroup.OnHierarchyChangeListener listener) 当一个孩子被添加到这个视图或从这个视图中删除时注册一个回调被调用。 |
void |
setPersistentDrawingCache(int drawingCacheToKeep) 指示创建后应将哪些类型的绘图缓存保留在内存中。 |
void |
setTouchscreenBlocksFocus(boolean touchscreenBlocksFocus) 设置此ViewGroup是否应忽略本身及其子项的焦点请求。 |
void |
setTransitionGroup(boolean isTransitionGroup) 在活动转换期间更改是否应该将此ViewGroup视为单个实体。 |
boolean |
shouldDelayChildPressedState() 如果应该延迟此ViewGroup的子项或后代的按下状态,则返回true。 |
boolean |
showContextMenuForChild(View originalView, float x, float y) 显示指定视图或其祖先的上下文菜单,该上下文菜单被锚定到指定的视图相对坐标。 |
boolean |
showContextMenuForChild(View originalView) 显示指定视图或其祖先的上下文菜单。 |
ActionMode |
startActionModeForChild(View originalView, ActionMode.Callback callback, int type) 为指定视图启动特定类型的操作模式。 |
ActionMode |
startActionModeForChild(View originalView, ActionMode.Callback callback) 启动默认类型为 |
void |
startLayoutAnimation() 运行布局动画。 |
void |
startViewTransition(View view) 此方法告诉ViewGroup,即使ViewGroup已从其父项中移除,应将ViewGroup作为其父项的给定View对象应保留(在ViewGroup绘制其子项时重新显示)。 |
void |
updateViewLayout(View view, ViewGroup.LayoutParams params) |
Protected methods |
|
---|---|
boolean |
addViewInLayout(View child, int index, ViewGroup.LayoutParams params, boolean preventRequestLayout) 在布局中添加视图。 |
boolean |
addViewInLayout(View child, int index, ViewGroup.LayoutParams params) 在布局中添加视图。 |
void |
attachLayoutAnimationParameters(View child, ViewGroup.LayoutParams params, int index, int count) 子类应该重写此方法以在提供的子级上设置布局动画参数。 |
void |
attachViewToParent(View child, int index, ViewGroup.LayoutParams params) 将视图附加到此视图组。 |
boolean |
canAnimate() 指示视图组是否能够在第一个布局之后为其子项设置动画。 |
boolean |
checkLayoutParams(ViewGroup.LayoutParams p) |
void |
cleanupLayoutState(View child) 防止在下一个布局过程中指定的子级布局。 |
void |
debug(int depth) 在日志输出中打印有关此视图的信息,标记为 |
void |
detachAllViewsFromParent() 从父项分离所有视图。 |
void |
detachViewFromParent(int index) 从其父项分离视图。 |
void |
detachViewFromParent(View child) 从其父项分离视图。 |
void |
detachViewsFromParent(int start, int count) 从父母那里分离出一系列的观点。 |
void |
dispatchDraw(Canvas canvas) 通过绘制来绘制子视图。 |
void |
dispatchFreezeSelfOnly(SparseArray<Parcelable> container) 执行 |
boolean |
dispatchGenericFocusedEvent(MotionEvent event) 将通用运动事件分派给当前的焦点视图。 |
boolean |
dispatchGenericPointerEvent(MotionEvent event) 将通用运动事件分配给第一个指针下的视图。 |
boolean |
dispatchHoverEvent(MotionEvent event) 发送悬停事件。 |
void |
dispatchRestoreInstanceState(SparseArray<Parcelable> container) 由 |
void |
dispatchSaveInstanceState(SparseArray<Parcelable> container) 由 |
void |
dispatchSetPressed(boolean pressed) 派发setPressed给所有这个View的孩子。 |
void |
dispatchThawSelfOnly(SparseArray<Parcelable> container) 执行派遣 |
void |
dispatchVisibilityChanged(View changedView, int visibility) 向视图层次结构分派视图可见性更改。 |
boolean |
drawChild(Canvas canvas, View child, long drawingTime) 绘制这个视图组的一个孩子。 |
void |
drawableStateChanged() 只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。 |
ViewGroup.LayoutParams |
generateDefaultLayoutParams() 返回一组默认布局参数。 |
ViewGroup.LayoutParams |
generateLayoutParams(ViewGroup.LayoutParams p) 根据提供的布局参数返回一组安全的布局参数。 |
int |
getChildDrawingOrder(int childCount, int i) 返回为此迭代绘制的子的索引。 |
boolean |
getChildStaticTransformation(View child, Transformation t) 将 |
boolean |
isChildrenDrawingOrderEnabled() 指示ViewGroup是否按照 |
boolean |
isChildrenDrawnWithCacheEnabled() 此方法在API级别23中已弃用。从 |
void |
measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) 要求这个视图的一个孩子测量自己,同时考虑到这个视图的MeasureSpec要求和填充。 |
void |
measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) 要求这个观点的一个孩子衡量自己,同时考虑到这个观点的MeasureSpec要求以及它的填充和边距。 |
void |
measureChildren(int widthMeasureSpec, int heightMeasureSpec) 要求所有这个视图的孩子测量自己,同时考虑到这个视图的MeasureSpec要求和填充。 |
void |
onAttachedToWindow() 这在视图附加到窗口时被调用。 |
int[] |
onCreateDrawableState(int extraSpace) 为此视图生成新的 |
void |
onDetachedFromWindow() 这是在视图从窗口分离时调用的。 |
abstract void |
onLayout(boolean changed, int l, int t, int r, int b) 当这个视图为每个孩子分配一个大小和位置时,从布局调用。 |
boolean |
onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect) 寻找一个后裔打电话 |
void |
removeDetachedView(View child, boolean animate) 完成删除分离的视图。 |
void |
setChildrenDrawingCacheEnabled(boolean enabled) 为此视图组的每个子项启用或禁用绘图缓存。 |
void |
setChildrenDrawingOrderEnabled(boolean enabled) 告诉ViewGroup是否按照方法 |
void |
setChildrenDrawnWithCacheEnabled(boolean enabled) 此方法在API级别23中已弃用。从 |
void |
setStaticTransformationsEnabled(boolean enabled) 当此属性设置为true时,此ViewGroup支持儿童的静态转换; 这会导致 |
Inherited methods |
|
---|---|
From class android.view.View
|
|
From class java.lang.Object
|
|
From interface android.graphics.drawable.Drawable.Callback
|
|
From interface android.view.KeyEvent.Callback
|
|
From interface android.view.accessibility.AccessibilityEventSource
|
|
From interface android.view.ViewParent
|
|
From interface android.view.ViewManager
|
设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 addStatesFromChildren
。
定义ViewGroup是否应始终使用绘图缓存绘制其子节点。 默认值是true。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 alwaysDrawnWithCache
。
定义布局中的更改(由添加和删除项目引起)是否应导致运行LayoutTransition。 当此标志设置为true时,将在ViewGroup容器上设置默认的LayoutTransition对象,并在发生这些布局更改时运行默认动画。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 animateLayoutChanges
。
相关方法:
定义布局动画是否应为其子项创建绘图缓存。 启用动画缓存消耗更多内存,并需要较长的初始化时间,但性能更好。 动画缓存默认启用。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 animationCache
。
定义孩子是否被限制在其范围内绘制。 例如,这对于将儿童的尺寸缩小到100%以上的动画非常有用。 在这种情况下,应该将该属性设置为false以允许孩子在界限之外绘制。 此属性的默认值为true。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 clipChildren
。
相关方法:
定义如果填充不为零,ViewGroup是否会剪切其子元素并将其大小(但不剪切)任何EdgeEffect填充到其填充。 该属性默认设置为true。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 clipToPadding
。
相关方法:
在查找视图以获得焦点时,定义ViewGroup及其后代之间的关系。
必须是下列常数值之一。
Constant | Value | 描述 |
---|---|---|
beforeDescendants |
0 | The ViewGroup will get focus before any of its descendants. |
afterDescendants |
1 | The ViewGroup will get focus only if none of its descendants want it. |
blocksDescendants |
2 | The ViewGroup will block its descendants from receiving focus. |
这对应于全局属性资源符号 descendantFocusability
。
定义布局动画以在ViewGroup第一次布置时使用。 布局动画也可以在第一个布局之后手动启动。
必须是另一个资源的引用,其形式为“ @[+][package:]type:name
”,或者其形式为“一个主题属性 ?[package:][type:]name
”。
这对应于全局属性资源符号 layoutAnimation
。
定义此ViewGroup的布局模式。
必须是下列常数值之一。
Constant | Value | 描述 |
---|---|---|
clipBounds |
0 | Use the children's clip bounds when laying out this container. |
opticalBounds |
1 | Use the children's optical bounds when laying out this container. |
这对应于全局属性资源符号 layoutMode
。
相关方法:
定义绘图缓存的持久性。 在特定情况下(例如在滚动期间),绘图缓存可能由ViewGroup为其所有子项启用。此属性允许您在初次使用后将缓存保留在内存中。 坚持缓存消耗更多的内存,但可能会阻止频繁的垃圾回收,缓存是一遍又一遍地创建的。 默认情况下,持久性设置为滚动。
必须是以下常量值中的一个或多个(用'|'分隔)。
Constant | Value | 描述 |
---|---|---|
none |
0x0 | The drawing cache is not persisted after use. |
animation |
0x1 | The drawing cache is persisted after a layout animation. |
scrolling |
0x2 | The drawing cache is persisted after a scroll. |
all |
0x3 | The drawing cache is always persisted. |
这对应于全局属性资源符号 persistentDrawingCache
。
设置此ViewGroup是否应在触摸事件分派期间将MotionEvents分割为独立的子视图。 如果为false(默认),触摸事件将被分派到第一个指针下降的子视图,直到最后一个指针上升。 如果为true,则可以将触发事件分派给多个孩子。 每个指针的MotionEvents将被分派到发生初始ACTION_DOWN事件的子视图。 有关更多信息,请参阅setMotionEventSplittingEnabled(boolean)
。
必须是布尔值,可以是“ true
”或“ false
”。
这也可能是对包含此类型值的资源(形式为“ @[package:]type:name
”)或主题属性(形式为“ ?[package:][type:]name
”)的 ?[package:][type:]name
。
这对应于全局属性资源符号 splitMotionEvents
。
相关方法:
int CLIP_TO_PADDING_MASK
当FLAG_CLIP_TO_PADDING和FLAG_PADDING_NOT_NULL同时设置时,我们剪裁为填充。
常量值:34(0x00000022)
int FOCUS_AFTER_DESCENDANTS
只有当它的后代都不需要它时,这个视图才会得到关注。
常量值:262144(0x00040000)
int FOCUS_BEFORE_DESCENDANTS
这个观点将在它的任何后代之前得到关注。
常量值:131072(0x00020000)
int FOCUS_BLOCK_DESCENDANTS
这种观点将阻止其后代的任何焦点,即使它们是可以聚焦的。
常量值:393216(0x00060000)
int LAYOUT_MODE_CLIP_BOUNDS
这个常数是layoutMode
。 剪辑范围是原始值left
, top
, right
和bottom
。
常量值:0(0x00000000)
int LAYOUT_MODE_OPTICAL_BOUNDS
这个常数是layoutMode
。 光学边界描述了一个小部件的出现位置。 他们坐在需要覆盖更大区域的剪辑边界内,以便绘制其他效果,例如阴影和发光。
常数值:1(0x00000001)
int PERSISTENT_ALL_CACHES
用于指示所有绘图缓存应保存在内存中。
常量值:3(0x00000003)
int PERSISTENT_ANIMATION_CACHE
用于指示动画制图缓存应保存在内存中。
常数值:1(0x00000001)
int PERSISTENT_NO_CACHE
用于指示绘图缓存不应保存在内存中。
常量值:0(0x00000000)
int PERSISTENT_SCROLLING_CACHE
用于指示滚动图形缓存应保存在内存中。
常量值:2(0x00000002)
ViewGroup (Context context, AttributeSet attrs)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
ViewGroup (Context context, AttributeSet attrs, int defStyleAttr)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
defStyleAttr |
int
|
ViewGroup (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)
Parameters | |
---|---|
context |
Context
|
attrs |
AttributeSet
|
defStyleAttr |
int
|
defStyleRes |
int
|
void addChildrenForAccessibility (ArrayList<View> outChildren)
将此视图的子项添加到给定列表的可访问性中作为输出。 由于一些视图对可访问性并不重要,因此添加的子视图不一定是这种视图的直接子项,而是它们是对可访问性很重要的第一级子孙。
Parameters | |
---|---|
outChildren |
ArrayList : The output list that will receive children for accessibility. |
void addFocusables (ArrayList<View> views, int direction, int focusableMode)
将视图后代的任何可聚焦视图添加到视图中(可能包括该视图,如果它本身是可聚焦的话)。 如果我们处于触摸模式,则该方法会添加所有可聚焦视图,或者只有在触摸模式下可以聚焦的视图才可以聚焦;如果根据可聚焦模式参数启用了辅助功能,则只有可以使用辅助焦点的视图。
Parameters | |
---|---|
views |
ArrayList : Focusable views found so far or null if all we are interested is the number of focusables. |
direction |
int : The direction of the focus. |
focusableMode |
int : The type of focusables to be added. |
boolean addStatesFromChildren ()
返回此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。
Returns | |
---|---|
boolean |
void addTouchables (ArrayList<View> views)
添加这个视图的后代的任何可触摸的视图(如果它可以自己触摸,可能包括这个视图)到视图。
Parameters | |
---|---|
views |
ArrayList : Touchable views found so far |
void addView (View child, ViewGroup.LayoutParams params)
添加具有指定布局参数的子视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
child |
View : the child view to add |
params |
ViewGroup.LayoutParams : the layout parameters to set on the child |
void addView (View child, int index)
添加子视图。 如果没有设置布局参数,则此子视图的默认参数设置在该子级上。
Note: do not invoke this method from draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
or any related method.
Parameters | |
---|---|
child |
View : the child view to add |
index |
int : the position at which to add the child |
void addView (View child, int index, ViewGroup.LayoutParams params)
添加具有指定布局参数的子视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
child |
View : the child view to add |
index |
int : the position at which to add the child or -1 to add last |
params |
ViewGroup.LayoutParams : the layout parameters to set on the child |
void addView (View child)
添加子视图。 如果没有设置布局参数,则此子视图的默认参数设置在该子级上。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
child |
View : the child view to add |
void addView (View child, int width, int height)
使用此ViewGroup的默认布局参数和指定的宽度和高度添加子视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
child |
View : the child view to add |
width |
int
|
height |
int
|
void bringChildToFront (View child)
更改孩子的z顺序,使其位于所有其他孩子的顶部。 如果此容器使用依赖于订单的布局方案(例如,LinearLayout),则此排序更改可能会影响布局。 在KITKAT
之前,应在此方法之后调用requestLayout()
和invalidate()
以强制父级重新绘制新的子级顺序。
Parameters | |
---|---|
child |
View : The child to bring to the top of the z order |
void childDrawableStateChanged (View child)
如果 addStatesFromChildren()
为true,则刷新该组的可绘制状态(以包含来自子项的状态)。
Parameters | |
---|---|
child |
View : The child whose drawable state has changed. |
void childHasTransientStateChanged (View child, boolean childHasTransientState)
当子视图发生变化时调用,无论它是否跟踪瞬态。
Parameters | |
---|---|
child |
View : Child view whose state has changed |
childHasTransientState |
boolean : true if this child has transient state |
void clearChildFocus (View child)
当该父母的一个孩子放弃焦点时调用
Parameters | |
---|---|
child |
View : The view that is giving up focus |
void clearDisappearingChildren ()
删除已删除的视图的任何待定动画。 如果您不希望将退出视图的动画叠加起来,请调用此方法。
void clearFocus ()
当这个观点想要放弃焦点时调用。 如果焦点被清除,则调用onFocusChanged(boolean, int, android.graphics.Rect)
。
注意:当一个视图清除焦点时,框架试图将焦点放在顶部的第一个可聚焦视图上。 因此,如果这个视图是第一个可以关注焦点的视图,那么所有与清除焦点相关的回调都将被调用,之后框架将把焦点放在这个视图上。
WindowInsets dispatchApplyWindowInsets (WindowInsets insets)
请求将给定的窗口插件应用于此视图或其子视图中的其他视图。
该方法应由希望应用与由窗饰或覆盖物遮蔽的区域相对应的插图的客户调用。 这可以包括状态和导航栏,操作栏,输入法等等。 未来可能会添加新的插页类别。 该方法返回所提供的插图,减去由此视图或其子项应用的插入。
希望提供自定义行为应该重写客户 onApplyWindowInsets(WindowInsets)
方法或者可选地提供一个 View.OnApplyWindowInsetsListener
经由 setOnApplyWindowInsetsListener
方法。
此方法取代了较旧的 fitSystemWindows
方法。
Parameters | |
---|---|
insets |
WindowInsets : Insets to apply |
Returns | |
---|---|
WindowInsets |
The provided insets minus the insets that were consumed |
void dispatchConfigurationChanged (Configuration newConfig)
在视图层次结构下分发有关资源配置更改的通知。 ViewGroups应该覆盖路由到他们的孩子。
Parameters | |
---|---|
newConfig |
Configuration : The new resource configuration. |
void dispatchDisplayHint (int hint)
发出是否显示此视图的提示。 例如,当视图移出屏幕时,它可能会收到显示提示,指示视图不显示。 应用程序不应该依赖这个提示,因为不能保证他们会收到一个。
Parameters | |
---|---|
hint |
int : A hint about whether or not this view is displayed: VISIBLE or INVISIBLE . |
boolean dispatchDragEvent (DragEvent event)
检测此视图是否已启用并具有拖动事件侦听器。 如果两者都为真,则它会使用它收到的DragEvent
调用拖动事件侦听器。 如果拖动事件侦听器返回true
,则dispatchDragEvent()返回true
。
对于所有其他情况,该方法调用 onDragEvent()
拖动事件处理程序方法并返回其结果。
这确保了拖动事件总是被消耗,即使View没有拖动事件监听器。 但是,如果View具有侦听器并且侦听器返回true,则不会调用onDragEvent()。
Parameters | |
---|---|
event |
DragEvent
|
Returns | |
---|---|
boolean |
void dispatchDrawableHotspotChanged (float x, float y)
将可绘制的热点更改分派到满足以下至少一个条件的子视图:
false
from both isClickable()
and isLongClickable()
setDuplicateParentStateEnabled(boolean)
Parameters | |
---|---|
x |
float : hotspot x coordinate |
y |
float : hotspot y coordinate |
boolean dispatchKeyEvent (KeyEvent event)
将关键事件分派到焦点路径上的下一个视图。 此路径从视图树的顶部向下延伸到当前聚焦的视图。 如果这个观点有重点,它会发送给自己。 否则,它将沿着焦点路径调度下一个节点。 这个方法也会触发任何关键的监听器。
Parameters | |
---|---|
event |
KeyEvent : The key event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
boolean dispatchKeyEventPreIme (KeyEvent event)
在与视图层次关联的任何输入方法处理关键事件之前分派关键事件。 这可以用于在IME消耗它们之前在特殊情况下截获关键事件; 一个典型的例子是处理BACK键来更新应用程序的UI,而不是让IME看到它并关闭它自己。
Parameters | |
---|---|
event |
KeyEvent : The key event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled, false otherwise. |
boolean dispatchKeyShortcutEvent (KeyEvent event)
分派键快捷键事件。
Parameters | |
---|---|
event |
KeyEvent : The key event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
void dispatchProvideStructure (ViewStructure structure)
在层次结构中调度创建ViewStructure
。 除了调用默认的View实现外,此实现还添加了视图组的所有子视图。
Parameters | |
---|---|
structure |
ViewStructure
|
void dispatchSetActivated (boolean activated)
派发setActivated给所有这个View的孩子。
Parameters | |
---|---|
activated |
boolean : The new activated state |
void dispatchSetSelected (boolean selected)
调度setSelected选择到所有这个View的孩子。
Parameters | |
---|---|
selected |
boolean : The new selected state |
void dispatchSystemUiVisibilityChanged (int visible)
在视图层次结构下调度回调到 setOnSystemUiVisibilityChangeListener(View.OnSystemUiVisibilityChangeListener)
。
Parameters | |
---|---|
visible |
int
|
boolean dispatchTouchEvent (MotionEvent ev)
将触摸屏动作事件向下传递给目标视图,或者将此视图作为目标。
Parameters | |
---|---|
ev |
MotionEvent : The motion event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
boolean dispatchTrackballEvent (MotionEvent event)
将轨迹球运动事件传递给焦点视图。
Parameters | |
---|---|
event |
MotionEvent : The motion event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
boolean dispatchUnhandledMove (View focused, int direction)
此方法是聚焦视图及其祖先响应箭头键的最后机会。 这在焦点视图在内部不消耗密钥时被调用,视图系统也不能在要求的方向上找到新焦点的视图。
Parameters | |
---|---|
focused |
View : The currently focused view. |
direction |
int : The direction focus wants to move. One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT. |
Returns | |
---|---|
boolean |
True if the this view consumed this unhandled move. |
void dispatchWindowFocusChanged (boolean hasFocus)
当包含此视图的窗口获得或失去窗口焦点时调用。 ViewGroups应该覆盖路由到他们的孩子。
Parameters | |
---|---|
hasFocus |
boolean : True if the window containing this view now has focus, false otherwise. |
void dispatchWindowSystemUiVisiblityChanged (int visible)
在视图层次结构中调用回调到 onWindowSystemUiVisibilityChanged(int)
。
Parameters | |
---|---|
visible |
int
|
void dispatchWindowVisibilityChanged (int visibility)
向视图层次结构中分派窗口可见性更改。 ViewGroups应该覆盖路由到他们的孩子。
Parameters | |
---|---|
visibility |
int : The new visibility of the window. |
void endViewTransition (View view)
此方法应始终在先前调用startViewTransition(View)
调用。 给定的视图最终会从其父视图中移除并不再显示。 请注意,此方法不会执行从其父级移除视图的功能; 它只是停止显示先前已被删除的视图。
Parameters | |
---|---|
view |
View
|
Returns | |
---|---|
void |
view The View object that has been removed but is being kept around in the visible hierarchy by an earlier call to startViewTransition(View) . |
View findFocus ()
在当前拥有焦点的此视图中植根的层次结构中查找视图。
Returns | |
---|---|
View |
The view that currently has focus, or null if no focused view can be found. |
void findViewsWithText (ArrayList<View> outViews, CharSequence text, int flags)
查找包含给定文本的视图。 遏制是不区分大小写的。 搜索由视图呈现的文本或描述视图的内容描述执行,以实现辅助功能,视图不呈现或两者兼而有之。 客户可以指定如何通过传递FIND_VIEWS_WITH_TEXT
和FIND_VIEWS_WITH_CONTENT_DESCRIPTION
标志来执行搜索。
Parameters | |
---|---|
outViews |
ArrayList : The output list of matching Views. |
text |
CharSequence : The text to match against. |
flags |
int
|
View focusSearch (View focused, int direction)
在指定的方向查找想要聚焦的最近视图。
Parameters | |
---|---|
focused |
View : The view that currently has focus |
direction |
int : One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT, or 0 for not applicable. |
Returns | |
---|---|
View |
void focusableViewAvailable (View v)
告诉家长,新的可调焦视图已经可用。 这是为了处理从没有可聚焦视图的情况到第一个可聚焦视图出现的情况的转换。
Parameters | |
---|---|
v |
View : The view that has become newly focusable |
boolean gatherTransparentRegion (Region region)
当视图层次结构包含一个或多个SurfaceView时,RootView将使用它来执行优化。 SurfaceView始终被认为是透明的,但它的子项不是,因此所有View对象都从全局透明区域中移除(作为参数传递给此函数)。
Parameters | |
---|---|
region |
Region : The transparent region for this ViewAncestor (window). |
Returns | |
---|---|
boolean |
Returns true if the effective visibility of the view at this point is opaque, regardless of the transparent region; returns false if it is possible for underlying windows to be seen behind the view. |
ViewGroup.LayoutParams generateLayoutParams (AttributeSet attrs)
根据提供的属性集返回一组新的布局参数。
Parameters | |
---|---|
attrs |
AttributeSet : the attributes to build the layout parameters from |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
CharSequence getAccessibilityClassName ()
返回此对象的类名称以用于辅助功能。 如果子类正在实现的东西应该被视为一个全新的视图类,当它被可访问性使用时,子类只应该覆盖这个子类,与它所源自的类无关。 这用于填写AccessibilityNodeInfo.setClassName
。
Returns | |
---|---|
CharSequence |
View getChildAt (int index)
返回组中指定位置的视图。
Parameters | |
---|---|
index |
int : the position at which to get the view from |
Returns | |
---|---|
View |
the view at the specified position or null if the position does not exist within the group |
int getChildCount ()
返回组中的子女数量。
Returns | |
---|---|
int |
a positive integer representing the number of children in the group |
int getChildMeasureSpec (int spec, int padding, int childDimension)
measureChildren的难点在于:搞清楚MeasureSpec传递给特定的孩子。 此方法为一个子视图的一个维度(高度或宽度)计算出正确的MeasureSpec。 我们的目标是将MeasureSpec的信息与孩子的LayoutParams相结合,以获得最佳结果。 例如,如果这个视图知道它的大小(因为它的MeasureSpec具有一个完全模式),并且孩子已经在它的LayoutParams中指出它想要与父母大小相同,那么父母应该要求孩子给定布局一个确切的大小。
Parameters | |
---|---|
spec |
int : The requirements for this view |
padding |
int : The padding of this view for the current dimension and margins, if applicable |
childDimension |
int : How big the child wants to be in the current dimension |
Returns | |
---|---|
int |
a MeasureSpec integer for the child |
boolean getChildVisibleRect (View child, Rect r, Point offset)
计算根据子视图坐标定义的矩形区域的可见部分。
返回在child
的本地坐标系中定义的矩形r
的剪切可见部分。 r
通过此方法进行修改以包含以全局(根)坐标系表示的结果。
得到的矩形始终与轴对齐。 如果旋转应用于View层次结构中的节点,则结果是可见矩形的轴对齐边界框。
Parameters | |
---|---|
child |
View : A child View, whose rectangular visible region we want to compute |
r |
Rect : The input rectangle, defined in the child coordinate system. Will be overwritten to contain the resulting visible rectangle, expressed in global (root) coordinates |
offset |
Point : The input coordinates of a point, defined in the child coordinate system. As with the r parameter, this will be overwritten to contain the global (root) coordinates of that point. A null value is valid (in case you are not interested in this result) |
Returns | |
---|---|
boolean |
true if the resulting rectangle is not empty, false otherwise |
boolean getClipChildren ()
返回绘制前是否将该组的子项剪切到其边界。 默认值是true。
Returns | |
---|---|
boolean |
True if the group's children will be clipped to their bounds, false otherwise. |
也可以看看:
boolean getClipToPadding ()
返回此ViewGroup是否将其子项剪裁为其填充,并且如果存在填充,则将任何EdgeEffect调整大小(但不剪切)到填充区域。
默认情况下,子项将剪切到其父视图组的填充位置。 此裁剪行为仅在填充不为零时启用。
相关XML属性:
Returns | |
---|---|
boolean |
true if this ViewGroup clips children to its padding and resizes (but doesn't clip) any EdgeEffect to the padded region, false otherwise. |
int getDescendantFocusability ()
获取此视图组的后代可聚焦性。 后代可聚焦限定寻找一个视图采取集中在当该视图组及其后代之间的关系requestFocus(int, android.graphics.Rect)
。
Returns | |
---|---|
int |
one of FOCUS_BEFORE_DESCENDANTS , FOCUS_AFTER_DESCENDANTS , FOCUS_BLOCK_DESCENDANTS . |
View getFocusedChild ()
返回此视图的重点子项(如果有)。 孩子可能有焦点或含有焦点。
Returns | |
---|---|
View |
the focused child or null. |
LayoutAnimationController getLayoutAnimation ()
返回用于动画组的子节点的布局动画控制器。
Returns | |
---|---|
LayoutAnimationController |
the current animation controller |
Animation.AnimationListener getLayoutAnimationListener ()
返回布局动画事件发送到的动画侦听器。
Returns | |
---|---|
Animation.AnimationListener |
an Animation.AnimationListener |
int getLayoutMode ()
返回此ViewGroup在布局操作期间的对齐基础: LAYOUT_MODE_CLIP_BOUNDS
或 LAYOUT_MODE_OPTICAL_BOUNDS
。
如果未以编程方式或在XML资源中明确设置layoutMode,则此方法返回视图的父ViewGroup的layoutMode(如果存在此父级),否则此方法返回默认值 LAYOUT_MODE_CLIP_BOUNDS
。
Returns | |
---|---|
int |
the layout mode to use during layout operations |
也可以看看:
LayoutTransition getLayoutTransition ()
获取此ViewGroup的LayoutTransition对象。 如果LayoutTransition对象不为null,则根据在该LayoutTransition对象中定义的动画,将因ViewGroup中添加或移除子项而发生的布局更改将生成动画。 默认情况下,转换对象为空(所以布局更改不会动画)。
Returns | |
---|---|
LayoutTransition |
LayoutTranstion The LayoutTransition object that will animated changes in layout. A value of null means no transition will run on layout changes. |
int getNestedScrollAxes ()
返回此ViewGroup的嵌套滚动的当前轴。
返回非 SCROLL_AXIS_NONE
之外的ViewGroup当前充当层次结构中一个或多个后代视图的嵌套滚动父项。
Returns | |
---|---|
int |
Flags indicating the current axes of nested scrolling |
ViewGroupOverlay getOverlay ()
返回此视图组的ViewGroupOverlay,如果它尚不存在,则创建它。 除了ViewOverlay
对drawable的支持之外, ViewGroupOverlay
允许将视图添加到叠加层。 这些视图,如叠加可绘制视图,仅供视觉使用; 它们不会接收输入事件,也不应该用作父容器中视图的临时表示以外的任何其他内容,例如可能会被动画效果使用。
注意:叠加层目前不能正确使用SurfaceView
或TextureView
; 这些类型视图的重叠内容可能无法正确显示。
Returns | |
---|---|
ViewGroupOverlay |
The ViewGroupOverlay object for this view. |
也可以看看:
int getPersistentDrawingCache ()
返回一个整数,指示将哪些类型的绘图缓存保存在内存中。
Returns | |
---|---|
int |
one or a combination of PERSISTENT_NO_CACHE , PERSISTENT_ANIMATION_CACHE , PERSISTENT_SCROLLING_CACHE and PERSISTENT_ALL_CACHES |
boolean getTouchscreenBlocksFocus ()
检查此ViewGroup是否应忽略本身及其子项的焦点请求。
Returns | |
---|---|
boolean |
boolean hasFocus ()
如果此视图具有或包含焦点,则返回true
Returns | |
---|---|
boolean |
true if this view has or contains focus |
boolean hasFocusable ()
如果此视图是可聚焦的,或者它包含可访问的视图, hasFocusable()
返回true,其中hasFocusable()
返回true。 “可达hasFocusable()”是父母不阻止后代关注的视图。 只有VISIBLE
意见被视为可重点。
Returns | |
---|---|
boolean |
True if the view is focusable or if the view contains a focusable View, false otherwise. |
boolean hasTransientState ()
指示视图当前是否跟踪暂时状态,即应用程序不需要关心保存和还原,但是框架应该特别注意在可能的情况下保留。
具有临时状态的视图不能从外部数据源轻松地重新启动,例如列表中的适配器绑定项目视图。 这可能是因为视图正在执行动画,跟踪用户对内容的选择等。
Returns | |
---|---|
boolean |
true if the view has transient state |
int indexOfChild (View child)
返回指定子视图的组中的位置。
Parameters | |
---|---|
child |
View : the view for which to get the position |
Returns | |
---|---|
int |
a positive integer representing the position of the view in the group, or -1 if the view does not exist in the group |
void invalidateChild (View child, Rect dirty)
不要调用或重写此方法。 它用于实现视图层次结构。
Parameters | |
---|---|
child |
View : The child which is dirty |
dirty |
Rect : The area within the child that is invalid |
ViewParent invalidateChildInParent (int[] location, Rect dirty)
不要调用或重写此方法。 它用于实现视图层次结构。 如果此ViewGroup没有父级,如果此ViewGroup已完全无效或者如果脏矩形不与此ViewGroup的边界相交,则此实现返回null。
Parameters | |
---|---|
location |
int : An array of 2 ints containing the left and top coordinates of the child to invalidate |
dirty |
Rect : The area within the child that is invalid |
Returns | |
---|---|
ViewParent |
the parent of this ViewParent or null |
boolean isAlwaysDrawnWithCacheEnabled ()
此方法在API级别23中已弃用。
从M
,该属性被忽略。 子视图可能不再允许父母禁用其缓存行为。
指示此ViewGroup是否总是尝试使用其绘图缓存来绘制其子级。 默认情况下,此属性已启用。
Returns | |
---|---|
boolean |
true if the animation cache is enabled, false otherwise |
boolean isAnimationCacheEnabled ()
此方法在API级别23中已弃用。
从M
,该属性被忽略。 儿童的缓存行为可通过setLayerType(int, Paint)
进行控制。
指示在布局动画期间是否使用儿童的绘图缓存。 默认情况下,绘图缓存已启用,但这会阻止嵌套布局动画的运行。 要嵌套动画,您必须禁用缓存。
Returns | |
---|---|
boolean |
true if the animation cache is enabled, false otherwise |
boolean isMotionEventSplittingEnabled ()
如果派发到此ViewGroup的MotionEvent可以分割为多个子项,则返回true。
Returns | |
---|---|
boolean |
true if MotionEvents dispatched to this ViewGroup can be split to multiple children. |
boolean isTransitionGroup ()
如果在执行活动转换时应将此ViewGroup视为要删除的单个实体,则返回true。 如果这是错误的,子元素将在转换过程中单独移动。
Returns | |
---|---|
boolean |
True if the ViewGroup should be acted on together during an Activity transition. The default value is true when there is a non-null background or if getTransitionName() is not null or if a non-null ViewOutlineProvider other than BACKGROUND was given to setOutlineProvider(ViewOutlineProvider) and false otherwise. |
void jumpDrawablesToCurrentState ()
在与此视图关联的所有可绘制对象上调用 Drawable.jumpToCurrentState()
。
如果有一个StateListAnimator附加到这个视图,也调用 jumpToCurrentState()
。
void layout (int l, int t, int r, int b)
为视图及其所有后代指定大小和位置
这是布局机制的第二阶段。 (首先是测量)。 在这个阶段,每个家长调用其所有孩子的布局来定位他们。 这通常使用存储在度量pass()中的子度量来完成。
派生类不应该重写此方法。 带孩子的派生类应该重写onLayout。 在这种方法中,他们应该给每个孩子打电话。
Parameters | |
---|---|
l |
int : Left position, relative to parent |
t |
int : Top position, relative to parent |
r |
int : Right position, relative to parent |
b |
int : Bottom position, relative to parent |
void notifySubtreeAccessibilityStateChanged (View child, View source, int changeType)
通知视图父级其子元素的可访问性状态已发生变化,并且子树的结构不同。
Parameters | |
---|---|
child |
View : The direct child whose subtree has changed. |
source |
View : The descendant view that changed. |
changeType |
int : A bit mask of the types of changes that occurred. One or more of:
|
void offsetDescendantRectToMyCoords (View descendant, Rect rect)
将位于后代坐标空间中的矩形偏移到我们的坐标空间中。
Parameters | |
---|---|
descendant |
View : A descendant of this view |
rect |
Rect : A rectangle defined in descendant's coordinate space. |
void offsetRectIntoDescendantCoords (View descendant, Rect rect)
将坐标空间中的矩形偏移到祖先的坐标空间中。
Parameters | |
---|---|
descendant |
View : A descendant of this view |
rect |
Rect : A rectangle defined in descendant's coordinate space. |
boolean onInterceptHoverEvent (MotionEvent event)
实现此方法以在由子视图处理悬停事件之前拦截悬停事件。
在将悬停事件分派给视图组的子项或视图组onHoverEvent(MotionEvent)
以允许视图组有机会截获悬停事件之前调用此方法。 即使指针悬停在视图组的子视图上,而不是在视图组本身上,该方法也可用于观察视图组边界内发生的所有指针运动。
视图组可以通过实现此方法阻止其子项接收悬停事件,并返回true
以指示它想拦截悬停事件。 视图组必须不断从onInterceptHoverEvent(MotionEvent)
返回true
,只要它希望继续拦截其子项的悬停事件即可。
拦截保留了不变的情况,即通过将悬停焦点从当前悬停的孩子转移到视图组或者根据需要反之,最多可以一次悬停一个视图。
如果此方法返回true
且孩子已经徘徊,那么子视图将首先收到悬停退出事件,然后视图组本身将收到onHoverEvent(MotionEvent)
的悬停输入事件。 同样,如果此方法先前已经返回true
来拦截悬停事件,而在指针悬停在其中一个孩子的边界内时返回false
,则视图组将首先接收onHoverEvent(MotionEvent)
的悬停退出事件,然后悬停的孩子将接收悬停输入事件。
默认实现处理滚动条上的鼠标悬停。
Parameters | |
---|---|
event |
MotionEvent : The motion event that describes the hover. |
Returns | |
---|---|
boolean |
True if the view group would like to intercept the hover event and prevent its children from receiving it. |
boolean onInterceptTouchEvent (MotionEvent ev)
实施此方法来拦截所有触摸屏幕动作事件。 这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。
使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)
有一个相当复杂的交互,并且使用它需要以正确的方式执行该方法。 活动将按以下顺序收到:
ACTION_CANCEL
, and all further events will be delivered to your onTouchEvent() method and no longer appear here. Parameters | |
---|---|
ev |
MotionEvent : The motion event being dispatched down the hierarchy. |
Returns | |
---|---|
boolean |
Return true to steal motion events from the children and have them dispatched to this ViewGroup through onTouchEvent(). The current target will receive an ACTION_CANCEL event, and no further messages will be delivered here. |
boolean onNestedFling (View target, float velocityX, float velocityY, boolean consumed)
从嵌套滚动中请求投掷。
这种方法表示嵌套滚动的孩子已经检测到适合于一阵子的条件。 通常这意味着触摸滚动以velocity
的滚动方向结束,沿着可滚动的轴线满足或超过minimum fling velocity
。
如果嵌套的滚动子视图通常会抛出,但它位于其自己的内容的边缘,则可以使用此方法代替该嵌套的滚动父级。 父母可以有选择地消费一下,或者观察孩子的情绪。
Parameters | |
---|---|
target |
View : View that initiated the nested scroll |
velocityX |
float : Horizontal velocity in pixels per second |
velocityY |
float : Vertical velocity in pixels per second |
consumed |
boolean : true if the child consumed the fling, false otherwise |
Returns | |
---|---|
boolean |
true if this parent consumed or otherwise reacted to the fling |
boolean onNestedPreFling (View target, float velocityX, float velocityY)
在目标视图消耗它之前,将其反应为嵌套的拖动。
这种方法意味着一个嵌套的滚动孩子已经检测到沿着每个轴具有给定速度的飞掷。 通常这意味着触摸滚动以velocity
的滚动方向结束,沿着可滚动的轴线满足或超过minimum fling velocity
。
如果嵌套的滚动父级将动作作为pre-scroll
一部分消耗,则它可能也会使用预先动作来完成相同的动作。 通过从这个方法返回true
,父母表明孩子不应该true
自己的内部内容。
Parameters | |
---|---|
target |
View : View that initiated the nested scroll |
velocityX |
float : Horizontal velocity in pixels per second |
velocityY |
float : Vertical velocity in pixels per second |
Returns | |
---|---|
boolean |
true if this parent consumed the fling ahead of the target view |
boolean onNestedPrePerformAccessibilityAction (View target, int action, Bundle args)
在目标进程处理之前,响应由目标后代视图委托的可访问性操作。
如果目标希望在其正常处理发生之前给其父链中的视图提供对该事件作出反应的机会,则该方法可以由目标后代视图调用。 最常见的情况是滚动事件,例如ACTION_SCROLL_FORWARD
。 支持作为嵌套滚动父级的ViewParent应该重写此方法并相应地执行通过可访问性系统的滚动。
子类应始终调用 super.onNestedPrePerformAccessibilityAction
Parameters | |
---|---|
target |
View : The target view dispatching this action |
action |
int : Action being performed; see AccessibilityNodeInfo |
args |
Bundle : Optional action arguments |
Returns | |
---|---|
boolean |
false by default. Subclasses should return true if they handle the event. |
void onNestedPreScroll (View target, int dx, int dy, int[] consumed)
在目标视图占用滚动的一部分之前,对正在进行的嵌套滚动进行处理。
当经常使用嵌套滚动时,父视图可能希望有机会在嵌套滚动子代之前使用滚动。 一个例子是一个包含可滚动列表的抽屉。 用户将希望能够在列表本身开始滚动之前将列表完全滚动到视图中。
onNestedPreScroll
在嵌套滚动子进行调用时调用dispatchNestedPreScroll(int, int, int[], int[])
。 该实现应报告dx,dy所报告的滚动像素是如何在consumed
阵列中消耗的。 索引0对应于dx,索引1对应于dy。 该参数永远不会为空。 消耗[0]和消耗[1]的初始值将始终为0。
Parameters | |
---|---|
target |
View : View that initiated the nested scroll |
dx |
int : Horizontal scroll distance in pixels |
dy |
int : Vertical scroll distance in pixels |
consumed |
int : Output. The horizontal and vertical scroll distance consumed by this parent |
void onNestedScroll (View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed)
反应到正在进行的嵌套滚动。
当ViewParent的当前嵌套滚动子视图调度一个嵌套滚动事件时,将调用此方法。 要接收对此方法的调用,ViewParent必须先前返回true
以拨打onStartNestedScroll(View, View, int)
。
将滚动距离的消耗部分和未消耗部分都报告给ViewParent。 例如,实现可以选择使用消费部分来匹配或追踪多个子元素的滚动位置。 未消耗部分可用于允许连续拖动多个滚动或可拖动元素,诸如在垂直抽屉内滚动列表,其中抽屉在达到内部滚动内容的边缘时开始拖动。
Parameters | |
---|---|
target |
View : The descendent view controlling the nested scroll |
dxConsumed |
int : Horizontal scroll distance in pixels already consumed by target |
dyConsumed |
int : Vertical scroll distance in pixels already consumed by target |
dxUnconsumed |
int : Horizontal scroll distance in pixels not consumed by target |
dyUnconsumed |
int : Vertical scroll distance in pixels not consumed by target |
void onNestedScrollAccepted (View child, View target, int axes)
响应成功声明嵌套滚动操作。
此方法将在onStartNestedScroll
返回true后onStartNestedScroll
。 它为视图及其超类为嵌套滚动执行初始配置提供了机会。 如果存在这种方法的实现,则应始终调用其超类的此方法的实现。
Parameters | |
---|---|
child |
View : Direct child of this ViewParent containing target |
target |
View : View that initiated the nested scroll |
axes |
int : Flags consisting of SCROLL_AXIS_HORIZONTAL , SCROLL_AXIS_VERTICAL or both |
boolean onRequestSendAccessibilityEvent (View child, AccessibilityEvent event)
当一个孩子要求发送一个 AccessibilityEvent
并给它的父母机会来增加事件时调用。
如果 View.AccessibilityDelegate
已通过调用指定 setAccessibilityDelegate(android.view.View.AccessibilityDelegate)
其 onRequestSendAccessibilityEvent(ViewGroup, View, AccessibilityEvent)
负责处理此调用。
Parameters | |
---|---|
child |
View : The child which requests sending the event. |
event |
AccessibilityEvent : The event to be sent. |
Returns | |
---|---|
boolean |
True if the event should be sent. |
PointerIcon onResolvePointerIcon (MotionEvent event, int pointerIndex)
返回运动事件的指针图标;如果未指定图标,则返回null。 默认实现不关心位置或事件类型,但某些子类可能会使用它(如WebViews)。
Parameters | |
---|---|
event |
MotionEvent : The MotionEvent from a mouse |
pointerIndex |
int : The index of the pointer for which to retrieve the PointerIcon . This will be between 0 and getPointerCount() . |
Returns | |
---|---|
PointerIcon |
boolean onStartNestedScroll (View child, View target, int nestedScrollAxes)
响应启动可嵌套滚动操作的后代视图,并在适当的情况下声明嵌套滚动操作。
这个方法将被调用以响应调用startNestedScroll(int)
的后代视图。 视图层次结构中的每个父代都将有机会通过返回true
来响应并声明嵌套滚动操作。
ViewParent实现可能会重写此方法,以指示视图何时愿意支持即将开始的嵌套滚动操作。 如果它返回true,则在正在进行滚动操作期间,此ViewParent将成为目标视图的嵌套滚动父级。 当嵌套滚动完成后,此ViewParent将收到对onStopNestedScroll(View)
的调用。
Parameters | |
---|---|
child |
View : Direct child of this ViewParent containing target |
target |
View : View that initiated the nested scroll |
nestedScrollAxes |
int : Flags consisting of SCROLL_AXIS_HORIZONTAL , SCROLL_AXIS_VERTICAL or both |
Returns | |
---|---|
boolean |
true if this ViewParent accepts the nested scroll operation |
void onStopNestedScroll (View child)
反应到嵌套滚动操作结束。
在嵌套滚动操作后执行清理。 此方法将在嵌套滚动停止时调用,例如,当嵌套触摸滚动以ACTION_UP
或ACTION_CANCEL
事件结束时。 如果存在这种方法的实现,则应始终调用其超类的此方法的实现。
Parameters | |
---|---|
child |
View : View that initiated the nested scroll |
void onViewAdded (View child)
当新的孩子被添加到这个ViewGroup时调用。 覆盖应该总是调用super.onViewAdded。
Parameters | |
---|---|
child |
View : the added child view |
void onViewRemoved (View child)
当从此ViewGroup中移除子视图时调用。 覆盖应该总是调用super.onViewRemoved。
Parameters | |
---|---|
child |
View : the removed child view |
void recomputeViewAttributes (View child)
告诉视图层次结构,需要重新评估全局视图属性。
Parameters | |
---|---|
child |
View : View whose attributes have changed. |
void removeAllViews ()
调用此方法从ViewGroup中删除所有子视图。
Note: do not invoke this method from draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
or any related method.
void removeAllViewsInLayout ()
由ViewGroup子类调用以从其自身中删除子视图时,它必须首先知道其屏幕大小,然后才能计算它将呈现多少个子视图。 一个例子是一个图库或一个ListView,它可能“有”50个孩子,但实际上只渲染当前可以放入屏幕上的对象内的孩子的数量。 除非您扩展ViewGroup并理解视图测量和布局管道,否则不要调用此方法。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
void removeView (View view)
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
view |
View
|
void removeViewAt (int index)
删除组中指定位置的视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
index |
int : the position in the group of the view to remove |
void removeViewInLayout (View view)
在布局过程中删除视图。 如果在onLayout()方法中,您需要删除更多视图,这很有用。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
view |
View : the view to remove from the group |
void removeViews (int start, int count)
从组中删除指定范围的视图。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
start |
int : the first position in the group of the range of views to remove |
count |
int : the number of views to remove |
void removeViewsInLayout (int start, int count)
在布局过程中删除一系列视图。 如果在onLayout()方法中,您需要删除更多视图,这很有用。
注意:不要调用此方法 draw(android.graphics.Canvas)
, onDraw(android.graphics.Canvas)
, dispatchDraw(android.graphics.Canvas)
或任何相关方法。
Parameters | |
---|---|
start |
int : the index of the first view to remove from the group |
count |
int : the number of views to remove from the group |
void requestChildFocus (View child, View focused)
当这个父母的孩子需要关注时调用
Parameters | |
---|---|
child |
View : The child of this ViewParent that wants focus. This view will contain the focused view. It is not necessarily the view that actually has focus. |
focused |
View : The view that is a descendant of child that actually has focus |
boolean requestChildRectangleOnScreen (View child, Rect rectangle, boolean immediate)
当该组的小孩想要将特定矩形定位到屏幕上时调用。 ViewGroup
重写这可以相信:
ViewGroup
的压倒一切应该维护合同:
Parameters | |
---|---|
child |
View : The direct child making the request. |
rectangle |
Rect : The rectangle in the child's coordinates the child wishes to be on the screen. |
immediate |
boolean : True to forbid animated or delayed scrolling, false otherwise |
Returns | |
---|---|
boolean |
Whether the group scrolled to handle the operation |
void requestDisallowInterceptTouchEvent (boolean disallowIntercept)
当孩子不希望这个父母及其祖先用 onInterceptTouchEvent(MotionEvent)
拦截触摸事件时 onInterceptTouchEvent(MotionEvent)
。
这位家长应该将此通知传递给其父母。 这位家长必须在接触期间服从这个要求(也就是说,只有在这位家长收到了或取消后才清除标志。
Parameters | |
---|---|
disallowIntercept |
boolean : True if the child does not want the parent to intercept touch events. |
boolean requestFocus (int direction, Rect previouslyFocusedRect)
调用此方法可试图将焦点放在特定视图或其后面的某个子视图上,并提供关于焦点来自的方向和特定矩形的提示。 该矩形可以帮助更大的视图提供关于焦点来自何处的更精细的提示,因此,可以在哪里显示选择内容,或者在内部转发焦点更改。 如果视图不可聚焦( isFocusable()
返回false),或者如果它是可isFocusableInTouchMode()
并且在设备处于触摸模式时不能在触摸模式( isFocusableInTouchMode()
)下对焦,则视图实际上不会聚焦。 如果视图不可见,视图将不会被关注。 如果其父母之一的getDescendantFocusability()
等于FOCUS_BLOCK_DESCENDANTS
则视图将不会被关注。 参见focusSearch(int)
,这是你打电话说你有焦点,并且你希望你的父母寻找下一个。 如果您的自定义View
有其希望转发请求的内部View
,您可能希望覆盖此方法。 寻找一种观点,重点关注getDescendantFocusability()
指定的设置。 在适当的时候使用onRequestFocusInDescendants(int, android.graphics.Rect)
来找到该组儿童的焦点。
Parameters | |
---|---|
direction |
int : One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT |
previouslyFocusedRect |
Rect : The rectangle (in this View's coordinate system) to give a finer grained hint about where focus is coming from. May be null if there is no hint. |
Returns | |
---|---|
boolean |
Whether this view or one of its descendants actually took focus. |
boolean requestSendAccessibilityEvent (View child, AccessibilityEvent event)
由小孩打电话要求其父母发送AccessibilityEvent
。 该小孩已经在活动中为自己填充了一条记录,并正在委托其父母发送活动。 家长可以选择为自己添加记录。
注意:可访问性事件是由单个视图触发的,该事件使用其状态记录填充事件,并从其父级请求执行发送。 在将请求分派给其父代之前,父代可以有选择地为其自身添加记录。 家长也可以选择不尊重发送活动的请求。 可访问性事件由视图树中最顶层的视图发送。
Parameters | |
---|---|
child |
View : The child which requests sending the event. |
event |
AccessibilityEvent : The event to be sent. |
Returns | |
---|---|
boolean |
True if the event was sent. |
void requestTransparentRegion (View child)
当孩子希望视图层次结构收集并向窗口合成器报告透明区域时调用。 在视图层次结构中“打洞”的视图(如SurfaceView)可以使用此API来提高系统的性能。 当层次结构中不存在这样的视图时,这种优化不必要,可能会略微降低视图层次结构的性能。
Parameters | |
---|---|
child |
View : the view requesting the transparent region computation |
void scheduleLayoutAnimation ()
计划布局动画在该视图组的下一个布局通过后播放。 这可用于在视图组的内容发生更改或活动暂停和恢复时重新启动布局动画。
void setAddStatesFromChildren (boolean addsStates)
设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。
Parameters | |
---|---|
addsStates |
boolean
|
void setAlwaysDrawnWithCacheEnabled (boolean always)
此方法在API级别23中已弃用。
从M
,该属性被忽略。 子视图可能不再允许父母禁用其缓存行为。
指示此ViewGroup是否总是尝试使用其绘图缓存来绘制其子级。 当缓存渲染与孩子的正常渲染稍有不同时,该属性可以设置为true。 例如,当缓存的质量设置为低时,渲染可能会有所不同。 当此属性被禁用时,ViewGroup仅在被要求时才使用其子图的绘图缓存。 通常,子类的任务是告诉ViewGroup何时开始使用绘图缓存以及何时停止使用它。
Parameters | |
---|---|
always |
boolean : true to always draw with the drawing cache, false otherwise |
void setAnimationCacheEnabled (boolean enabled)
此方法在API级别23中已弃用。
从M
,该属性被忽略。 通过setLayerType(int, Paint)
可以控制儿童的缓存行为。
在布局动画中启用或禁用儿童的绘图缓存。 默认情况下,绘图缓存已启用,但这会阻止嵌套布局动画的运行。 要嵌套动画,您必须禁用缓存。
Parameters | |
---|---|
enabled |
boolean : true to enable the animation cache, false otherwise |
void setClipChildren (boolean clipChildren)
默认情况下,在绘制之前,儿童将被剪裁到其边界。 这允许视图组为动画等覆盖此行为。
相关XML属性:
Parameters | |
---|---|
clipChildren |
boolean : true to clip children to their bounds, false otherwise |
void setClipToPadding (boolean clipToPadding)
设置此ViewGroup是否将其子对象填充到其填充中,并将存在填充的任何EdgeEffect调整大小(但不剪切)到填充区域。
默认情况下,子项被剪裁到其父ViewGroup的填充。 此裁剪行为仅在填充不为零时启用。
相关XML属性:
Parameters | |
---|---|
clipToPadding |
boolean : true to clip children to the padding of the group, and resize (but not clip) any EdgeEffect to the padded region. False otherwise. |
void setDescendantFocusability (int focusability)
设置此视图组的后代可聚焦性。 当在requestFocus(int, android.graphics.Rect)
寻找焦点时,这定义了该视图组与其后代之间的关系。
Parameters | |
---|---|
focusability |
int : one of FOCUS_BEFORE_DESCENDANTS , FOCUS_AFTER_DESCENDANTS , FOCUS_BLOCK_DESCENDANTS . |
void setLayoutAnimation (LayoutAnimationController controller)
设置用于在第一个布局之后为组的子项设置动画效果的布局动画控制器。
Parameters | |
---|---|
controller |
LayoutAnimationController : the animation controller |
void setLayoutAnimationListener (Animation.AnimationListener animationListener)
指定必须向其发送布局动画事件的动画侦听器。 只有onAnimationStart(Animation)
和onAnimationEnd(Animation)
被调用。
Parameters | |
---|---|
animationListener |
Animation.AnimationListener : the layout animation listener |
void setLayoutMode (int layoutMode)
设置此ViewGroup布局过程中的对齐基础。 有效值为LAYOUT_MODE_CLIP_BOUNDS
或LAYOUT_MODE_OPTICAL_BOUNDS
。
相关XML属性:
Parameters | |
---|---|
layoutMode |
int : the layout mode to use during layout operations |
也可以看看:
void setLayoutTransition (LayoutTransition transition)
为此ViewGroup设置LayoutTransition对象。 如果LayoutTransition对象不为null,则根据在该LayoutTransition对象中定义的动画,将因ViewGroup中添加或移除子项而发生的布局更改将生成动画。 默认情况下,转换对象为空(所以布局更改不会动画)。
如果替换非空过渡将导致先前的过渡被取消(如果它当前正在运行),则将此容器恢复到其正确的过渡后状态。
相关XML属性:
Parameters | |
---|---|
transition |
LayoutTransition : The LayoutTransition object that will animated changes in layout. A value of null means no transition will run on layout changes. |
void setMotionEventSplittingEnabled (boolean split)
在触摸事件分派期间启用或禁用将MotionEvents分割为多个子项。 针对面向SDK版本HONEYCOMB
或更新版本的应用程序,此行为默认启用。
启用此选项时,MotionEvents可能会被拆分并分派到不同的子视图,具体取决于每个指针最初的位置。 这允许用户交互,诸如独立地滚动两个内容窗格,按下按钮,并且在不同的内容上执行独立的手势。
相关XML属性:
Parameters | |
---|---|
split |
boolean : true to allow MotionEvents to be split and dispatched to multiple child views. false to only allow one child view to be the target of any MotionEvent received by this ViewGroup. |
void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)
当一个孩子被添加到这个视图或从这个视图中删除时注册一个回调被调用。
Parameters | |
---|---|
listener |
ViewGroup.OnHierarchyChangeListener : the callback to invoke on hierarchy change |
void setPersistentDrawingCache (int drawingCacheToKeep)
指示创建后应将哪些类型的绘图缓存保留在内存中。
Parameters | |
---|---|
drawingCacheToKeep |
int : one or a combination of PERSISTENT_NO_CACHE , PERSISTENT_ANIMATION_CACHE , PERSISTENT_SCROLLING_CACHE and PERSISTENT_ALL_CACHES |
void setTouchscreenBlocksFocus (boolean touchscreenBlocksFocus)
设置此ViewGroup是否应忽略本身及其子项的焦点请求。 如果启用此选项并且ViewGroup或后代目前拥有焦点,则焦点将继续前进。
Parameters | |
---|---|
touchscreenBlocksFocus |
boolean : true to enable blocking focus in the presence of a touchscreen |
void setTransitionGroup (boolean isTransitionGroup)
在活动转换期间更改是否应该将此ViewGroup视为单个实体。
Parameters | |
---|---|
isTransitionGroup |
boolean : Whether or not the ViewGroup should be treated as a unit in Activity transitions. If false, the ViewGroup won't transition, only its children. If true, the entire ViewGroup will transition together. |
boolean shouldDelayChildPressedState ()
如果应该延迟此ViewGroup的子项或后代的按下状态,则返回true。 通常,这应该对可以滚动的容器(例如List)完成。 这可以防止在用户实际尝试滚动内容时出现按下状态。 出于兼容性原因,默认实现返回true。 不滚动的子类通常应该重写此方法并返回false。
Returns | |
---|---|
boolean |
boolean showContextMenuForChild (View originalView, float x, float y)
显示指定视图或其祖先的上下文菜单,该上下文菜单被锚定到指定的视图相对坐标。
在大多数情况下,子类不需要覆盖它。 但是,如果子类直接添加到窗口管理器(例如, addView(View, android.view.ViewGroup.LayoutParams)
),那么它应该覆盖此并显示上下文菜单。
如果一个子类覆盖了这个方法,它也应该覆盖 showContextMenuForChild(View)
。
Parameters | |
---|---|
originalView |
View : the source view where the context menu was first invoked |
x |
float : the X coordinate in pixels relative to the original view to which the menu should be anchored, or NaN to disable anchoring |
y |
float : the Y coordinate in pixels relative to the original view to which the menu should be anchored, or NaN to disable anchoring |
Returns | |
---|---|
boolean |
true if the context menu was shown, false otherwise |
boolean showContextMenuForChild (View originalView)
显示指定视图或其祖先的上下文菜单。
在大多数情况下,子类不需要覆盖它。 但是,如果子类直接添加到窗口管理器(例如, addView(View, android.view.ViewGroup.LayoutParams)
),那么它应该覆盖此并显示上下文菜单。
Parameters | |
---|---|
originalView |
View : the source view where the context menu was first invoked |
Returns | |
---|---|
boolean |
true if the context menu was shown, false otherwise |
ActionMode startActionModeForChild (View originalView, ActionMode.Callback callback, int type)
为指定视图启动特定类型的操作模式。
在大多数情况下,子类不需要覆盖它。 但是,如果子类直接添加到窗口管理器(例如, addView(View, android.view.ViewGroup.LayoutParams)
),那么它应该覆盖此并启动操作模式。
Parameters | |
---|---|
originalView |
View : The source view where the action mode was first invoked |
callback |
ActionMode.Callback : The callback that will handle lifecycle events for the action mode |
type |
int : One of TYPE_PRIMARY or TYPE_FLOATING . |
Returns | |
---|---|
ActionMode |
The new action mode if it was started, null otherwise |
ActionMode startActionModeForChild (View originalView, ActionMode.Callback callback)
启动默认类型为 TYPE_PRIMARY
的指定视图的操作模式。
在大多数情况下,子类不需要覆盖它。 但是,如果子类直接添加到窗口管理器(例如, addView(View, android.view.ViewGroup.LayoutParams)
),则应该覆盖此并启动操作模式。
Parameters | |
---|---|
originalView |
View : The source view where the action mode was first invoked |
callback |
ActionMode.Callback : The callback that will handle lifecycle events for the action mode |
Returns | |
---|---|
ActionMode |
The new action mode if it was started, null otherwise |
void startViewTransition (View view)
此方法告诉ViewGroup,即使ViewGroup已从其父项中移除,应将ViewGroup作为其父项的给定View对象应保留(在ViewGroup绘制其子项时重新显示)。 这允许动画(例如由Fragment
和LayoutTransition
使用的动画)去除视图的动画。 对这个方法的调用应该总是伴随着以后对endViewTransition(View)
调用,比如在View上的动画完成之后,这样View最终被移除。
Parameters | |
---|---|
view |
View : The View object to be kept visible even if it gets removed from its parent. |
void updateViewLayout (View view, ViewGroup.LayoutParams params)
Parameters | |
---|---|
view |
View
|
params |
ViewGroup.LayoutParams
|
boolean addViewInLayout (View child, int index, ViewGroup.LayoutParams params, boolean preventRequestLayout)
在布局中添加视图。 如果在onLayout()方法中,您需要添加更多视图(例如列表视图),这非常有用。 如果索引是负数,则意味着将其放在列表的末尾。
Parameters | |
---|---|
child |
View : the view to add to the group |
index |
int : the index at which the child must be added or -1 to add last |
params |
ViewGroup.LayoutParams : the layout parameters to associate with the child |
preventRequestLayout |
boolean : if true, calling this method will not trigger a layout request on child |
Returns | |
---|---|
boolean |
true if the child was added, false otherwise |
boolean addViewInLayout (View child, int index, ViewGroup.LayoutParams params)
在布局中添加视图。 如果在onLayout()方法中,您需要添加更多视图(例如列表视图),这非常有用。 如果索引是负数,则意味着将其放在列表的末尾。
Parameters | |
---|---|
child |
View : the view to add to the group |
index |
int : the index at which the child must be added or -1 to add last |
params |
ViewGroup.LayoutParams : the layout parameters to associate with the child |
Returns | |
---|---|
boolean |
true if the child was added, false otherwise |
void attachLayoutAnimationParameters (View child, ViewGroup.LayoutParams params, int index, int count)
子类应该重写此方法以在提供的子级上设置布局动画参数。
Parameters | |
---|---|
child |
View : the child to associate with animation parameters |
params |
ViewGroup.LayoutParams : the child's layout parameters which hold the animation parameters |
index |
int : the index of the child in the view group |
count |
int : the number of children in the view group |
void attachViewToParent (View child, int index, ViewGroup.LayoutParams params)
将视图附加到此视图组。 附加视图将该组指定为父项,设置布局参数并将视图放入子项列表中,以便通过调用getChildAt(int)
可以检索它。
这种方法的目的是轻量级的,并且不会假定父母或孩子是否应该重绘。 正确使用此方法将包括进行任何适当的requestLayout()
或invalidate()
调用。 例如,呼叫者可以post
一个Runnable
其执行requestLayout()
下一帧上,毕竟分离/附加的呼叫完成后,使布局中之前重绘视图层级运行。
这个方法只应该被调用来从他们的父母分离的视图。
Parameters | |
---|---|
child |
View : the child to attach |
index |
int : the index at which the child should be attached |
params |
ViewGroup.LayoutParams : the layout parameters of the child |
boolean canAnimate ()
指示视图组是否能够在第一个布局之后为其子项设置动画。
Returns | |
---|---|
boolean |
true if the children can be animated, false otherwise |
boolean checkLayoutParams (ViewGroup.LayoutParams p)
Parameters | |
---|---|
p |
ViewGroup.LayoutParams
|
Returns | |
---|---|
boolean |
void cleanupLayoutState (View child)
防止在下一个布局过程中指定的子级布局。
Parameters | |
---|---|
child |
View : the child on which to perform the cleanup |
void debug (int depth)
在日志输出中打印有关此视图的信息,标记为VIEW_LOG_TAG
。 输出中的每一行前都有一个由depth
定义的depth
。
Parameters | |
---|---|
depth |
int : the indentation level |
void detachAllViewsFromParent ()
从父项分离所有视图。 请拨attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)
或致电removeDetachedView(View, boolean)
, attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)
再removeDetachedView(View, boolean)
。 支队应该只是暂时的; 重新附着或去除应该在与分离相同的绘制周期内发生。 当视图分离时,其父项为空,无法通过调用getChildAt(int)
进行检索。
void detachViewFromParent (int index)
从其父项分离视图。 应该通过拨打attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)
或致电removeDetachedView(View, boolean)
来removeDetachedView(View, boolean)
。 支队应该只是暂时的; 重新附着或去除应该在与分离相同的绘制周期内发生。 当视图分离时,其父项为空,无法通过调用getChildAt(int)
进行检索。
Parameters | |
---|---|
index |
int : the index of the child to detach |
void detachViewFromParent (View child)
从其父项分离视图。 应该通过拨打attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)
或致电removeDetachedView(View, boolean)
来removeDetachedView(View, boolean)
。 支队应该只是暂时的; 重新附着或去除应该在与分离相同的绘制周期内发生。 当视图分离时,其父项为空,无法通过调用getChildAt(int)
来检索。
Parameters | |
---|---|
child |
View : the child to detach |
void detachViewsFromParent (int start, int count)
从父母那里分离出一系列的观点。 应该拨打attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)
或致电removeDetachedView(View, boolean)
, removeDetachedView(View, boolean)
。 支队应该只是暂时的; 重新附着或去除应该在与分离相同的绘制周期内发生。 当视图分离时,其父项为空,无法通过调用getChildAt(int)
进行检索。
Parameters | |
---|---|
start |
int : the first index of the childrend range to detach |
count |
int : the number of children to detach |
void dispatchDraw (Canvas canvas)
通过绘制来绘制子视图。 这可能会被派生类重写,以便在子对象被绘制之前获得控制权(但在绘制自己的视图之后)。
Parameters | |
---|---|
canvas |
Canvas : the canvas on which to draw the view |
void dispatchFreezeSelfOnly (SparseArray<Parcelable> container)
执行saveHierarchyState(android.util.SparseArray)
freeze()派发只给这个视图,而不是它的子项。 用于覆盖dispatchSaveInstanceState(android.util.SparseArray)
dispatchFreeze()}以允许子类冻结其自己的状态,但不冻结其子级的状态。
Parameters | |
---|---|
container |
SparseArray : the container |
boolean dispatchGenericFocusedEvent (MotionEvent event)
将通用运动事件分派给当前的焦点视图。
不要直接调用这个方法。 改为拨打dispatchGenericMotionEvent(MotionEvent)
。
Parameters | |
---|---|
event |
MotionEvent : The motion event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
boolean dispatchGenericPointerEvent (MotionEvent event)
将通用运动事件分配给第一个指针下的视图。
不要直接调用这个方法。 改为拨打dispatchGenericMotionEvent(MotionEvent)
。
Parameters | |
---|---|
event |
MotionEvent : The motion event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
boolean dispatchHoverEvent (MotionEvent event)
发送悬停事件。
不要直接调用这个方法。 改为拨打dispatchGenericMotionEvent(MotionEvent)
。
Parameters | |
---|---|
event |
MotionEvent : The motion event to be dispatched. |
Returns | |
---|---|
boolean |
True if the event was handled by the view, false otherwise. |
void dispatchRestoreInstanceState (SparseArray<Parcelable> container)
由restoreHierarchyState(android.util.SparseArray)
调用以检索此视图及其子项的状态。 可能会被覆盖以修改对视图的子项进行恢复的方式; 例如,一些视图可能不想为他们的孩子存储状态。
Parameters | |
---|---|
container |
SparseArray : The SparseArray which holds previously saved state. |
void dispatchSaveInstanceState (SparseArray<Parcelable> container)
由saveHierarchyState(android.util.SparseArray)
调用以存储此视图及其子项的状态。 可能会被忽略,以修改视图的孩子发生冻结的情况; 例如,一些视图可能不想为他们的孩子存储状态。
Parameters | |
---|---|
container |
SparseArray : The SparseArray in which to save the view's state. |
void dispatchSetPressed (boolean pressed)
派发setPressed给所有这个View的孩子。
Parameters | |
---|---|
pressed |
boolean : The new pressed state |
void dispatchThawSelfOnly (SparseArray<Parcelable> container)
执行派遣restoreHierarchyState(android.util.SparseArray)
只有这个看法,而不是它的孩子。 用于覆盖dispatchRestoreInstanceState(android.util.SparseArray)
以允许子类解冻他们自己的状态,但不解释其子女的状态。
Parameters | |
---|---|
container |
SparseArray : the container |
void dispatchVisibilityChanged (View changedView, int visibility)
向视图层次结构分派视图可见性更改。 ViewGroups应该覆盖路由到他们的孩子。
Parameters | |
---|---|
changedView |
View : The view whose visibility changed. Could be 'this' or an ancestor view. |
visibility |
int : The new visibility of changedView: VISIBLE , INVISIBLE or GONE . |
boolean drawChild (Canvas canvas, View child, long drawingTime)
绘制这个视图组的一个孩子。 这个方法负责让画布处于正确的状态。 这包括剪裁,翻译,以便孩子的滚动起点在0,0,并应用任何动画转换。
Parameters | |
---|---|
canvas |
Canvas : The canvas on which to draw the child |
child |
View : Who to draw |
drawingTime |
long : The time at which draw is occurring |
Returns | |
---|---|
boolean |
True if an invalidate() was issued |
void drawableStateChanged ()
只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。
如果View有一个StateListAnimator,它也将被调用来运行必要的状态改变动画。
重写此功能时,一定要调用超类。
ViewGroup.LayoutParams generateDefaultLayoutParams ()
返回一组默认布局参数。 当传递给addView(View)
的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。
Returns | |
---|---|
ViewGroup.LayoutParams |
a set of default layout parameters or null |
ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p)
根据提供的布局参数返回一组安全的布局参数。 当一个ViewGroup被传递了一个View,其布局参数没有通过checkLayoutParams(android.view.ViewGroup.LayoutParams)
的测试时,这个方法被调用。 此方法应该返回一组适合此ViewGroup的布局参数,可能是通过从指定的一组布局参数中复制适当的属性。
Parameters | |
---|---|
p |
ViewGroup.LayoutParams : The layout parameters to convert into a suitable set of layout parameters for this ViewGroup. |
Returns | |
---|---|
ViewGroup.LayoutParams |
an instance of ViewGroup.LayoutParams or one of its descendants |
int getChildDrawingOrder (int childCount, int i)
返回为此迭代绘制的子的索引。 如果要更改儿童的绘图顺序,请覆盖此选项。 默认情况下,它返回i。
注:为了调用此方法,您必须首先通过调用 setChildrenDrawingOrderEnabled(boolean)
来启用子订单。
Parameters | |
---|---|
childCount |
int
|
i |
int : The current iteration. |
Returns | |
---|---|
int |
The index of the child to draw this iteration. |
boolean getChildStaticTransformation (View child, Transformation t)
将t
设置为子级的静态转换,如果设置,则返回布尔值以指示是否设置了静态转换。 默认实现只返回false
; 子类可以针对不同的行为重写此方法。 setStaticTransformationsEnabled(boolean)
必须设置为true才能调用此方法。
Parameters | |
---|---|
child |
View : The child view whose static transform is being requested |
t |
Transformation : The Transformation which will hold the result |
Returns | |
---|---|
boolean |
true if the transformation was set, false otherwise |
boolean isChildrenDrawingOrderEnabled ()
指示ViewGroup是否按照 getChildDrawingOrder(int, int)
定义的顺序绘制其子 getChildDrawingOrder(int, int)
。
Returns | |
---|---|
boolean |
true if children drawing order is defined by getChildDrawingOrder(int, int) , false otherwise |
boolean isChildrenDrawnWithCacheEnabled ()
此方法在API级别23中已弃用。
从M
,该属性被忽略。 子视图可能不再被父母强制缓存渲染状态。 setLayerType(int, Paint)
在个别视图上使用setLayerType(int, Paint)
。
指示ViewGroup是否正在使用绘图缓存绘制其子级。
Returns | |
---|---|
boolean |
true if children should be drawn with their cache, false otherwise |
void measureChild (View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec)
要求这个视图的一个孩子测量自己,同时考虑到这个视图的MeasureSpec要求和填充。 繁重的工作由getChildMeasureSpec完成。
Parameters | |
---|---|
child |
View : The child to measure |
parentWidthMeasureSpec |
int : The width requirements for this view |
parentHeightMeasureSpec |
int : The height requirements for this view |
void measureChildWithMargins (View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed)
要求这个观点的一个孩子衡量自己,同时考虑到这个观点的MeasureSpec要求以及它的填充和边距。 孩子必须拥有MarginLayoutParams这个繁重的工作是在getChildMeasureSpec中完成的。
Parameters | |
---|---|
child |
View : The child to measure |
parentWidthMeasureSpec |
int : The width requirements for this view |
widthUsed |
int : Extra space that has been used up by the parent horizontally (possibly by other children of the parent) |
parentHeightMeasureSpec |
int : The height requirements for this view |
heightUsed |
int : Extra space that has been used up by the parent vertically (possibly by other children of the parent) |
void measureChildren (int widthMeasureSpec, int heightMeasureSpec)
要求所有这个视图的孩子测量自己,同时考虑到这个视图的MeasureSpec要求和填充。 我们跳过处于GONE状态的孩子。繁重的工作由getChildMeasureSpec完成。
Parameters | |
---|---|
widthMeasureSpec |
int : The width requirements for this view |
heightMeasureSpec |
int : The height requirements for this view |
void onAttachedToWindow ()
这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 注意这个函数保证在onDraw(android.graphics.Canvas)
之前被调用,但是它可以在第一个onDraw之前的任何时候被调用 - 包括在onMeasure(int, int)
之前或之后。
int[] onCreateDrawableState (int extraSpace)
为此视图生成新的Drawable
状态。 当缓存的Drawable状态被确定为无效时,这由视图系统调用。 要检索当前状态,您应该使用getDrawableState()
。
Parameters | |
---|---|
extraSpace |
int : if non-zero, this is the number of extra entries you would like in the returned array in which you can place your own states. |
Returns | |
---|---|
int[] |
Returns an array holding the current Drawable state of the view. |
void onLayout (boolean changed, int l, int t, int r, int b)
当这个视图为每个孩子分配一个大小和位置时,从布局调用。 带孩子的派生类应该覆盖这个方法,并调用他们每个孩子的布局。
Parameters | |
---|---|
changed |
boolean : This is a new size or position for this view |
l |
int : Left position, relative to parent |
t |
int : Top position, relative to parent |
r |
int : Right position, relative to parent |
b |
int : Bottom position, relative to parent |
boolean onRequestFocusInDescendants (int direction, Rect previouslyFocusedRect)
找一个后裔打电话给requestFocus()
。 当它想要在其子女内请求焦点时由requestFocus(int, android.graphics.Rect)
调用。 重写此设置可以自定义您的ViewGroup
请求中ViewGroup
请求的重点。
Parameters | |
---|---|
direction |
int : One of FOCUS_UP, FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT |
previouslyFocusedRect |
Rect : The rectangle (in this View's coordinate system) to give a finer grained hint about where focus is coming from. May be null if there is no hint. |
Returns | |
---|---|
boolean |
Whether focus was taken. |
void removeDetachedView (View child, boolean animate)
完成删除分离的视图。 此方法将分派脱离窗口事件并通知层次结构更改侦听器。
这种方法的目的是轻量级的,并且不会假定父母或孩子是否应该重绘。 正确使用此方法还将包括进行任何适当的requestLayout()
或invalidate()
调用。 例如,呼叫者可以post
一个Runnable
其执行requestLayout()
下一帧上,毕竟分离/除去的呼叫完成后,使布局中之前重绘视图层级运行。
Parameters | |
---|---|
child |
View : the child to be definitely removed from the view hierarchy |
animate |
boolean : if true and the view has an animation, the view is placed in the disappearing views list, otherwise, it is detached from the window |
void setChildrenDrawingCacheEnabled (boolean enabled)
为此视图组的每个子项启用或禁用绘图缓存。
Parameters | |
---|---|
enabled |
boolean : true to enable the cache, false to dispose of it |
void setChildrenDrawingOrderEnabled (boolean enabled)
告诉ViewGroup是否按照方法 getChildDrawingOrder(int, int)
定义的顺序绘制子 getChildDrawingOrder(int, int)
。
请注意,由 dispatchDraw(Canvas)
完成的 Z
重新排序将覆盖通过此方法完成的自定义子订单。
Parameters | |
---|---|
enabled |
boolean : true if the order of the children when drawing is determined by getChildDrawingOrder(int, int) , false otherwise |
void setChildrenDrawnWithCacheEnabled (boolean enabled)
此方法在API级别23中已弃用。
从M
,该属性被忽略。 子视图可能不再被父母强制缓存渲染状态。 setLayerType(int, Paint)
在个别视图上使用setLayerType(int, Paint)
。
告诉ViewGroup使用他们的绘图缓存来绘制他们的孩子。 当isAlwaysDrawnWithCacheEnabled()
为真时,该属性将被忽略。 一个孩子的绘图缓存只有在它被启用的情况下才会被使用。 当它们执行性能敏感的操作时,子类应调用此方法来启动和停止使用图形缓存,如滚动或动画。
Parameters | |
---|---|
enabled |
boolean : true if children should be drawn with their cache, false otherwise |
void setStaticTransformationsEnabled (boolean enabled)
当此属性设置为true时,此ViewGroup支持儿童的静态转换; 这会导致getChildStaticTransformation(View, android.view.animation.Transformation)
在孩子被绘制时被调用。 覆盖getChildStaticTransformation(View, android.view.animation.Transformation)
类getChildStaticTransformation(View, android.view.animation.Transformation)
应该将此属性设置为true。
Parameters | |
---|---|
enabled |
boolean : True to enable static transformations on children, false otherwise. |