Most visited

Recently visited

Added in API level 1

ViewGroup

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

Developer Guides

有关创建用户界面布局的更多信息,请阅读 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>

Summary

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

这个常数是 layoutMode

int LAYOUT_MODE_OPTICAL_BOUNDS

这个常数是 layoutMode

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)

如果 addStatesFromChildren()为true,则刷新该组的可绘制状态(以包含来自子项的状态)。

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)

在层次结构中分派创建 ViewStructure

void dispatchSetActivated(boolean activated)

派发setActivated给所有这个View的孩子。

void dispatchSetSelected(boolean selected)

调度setSelected选择到所有这个View的孩子。

void dispatchSystemUiVisibilityChanged(int visible)

向视图层次结构调度回调到 setOnSystemUiVisibilityChangeListener(View.OnSystemUiVisibilityChangeListener)

boolean dispatchTouchEvent(MotionEvent ev)

将触摸屏动作事件向下传递给目标视图,或者将此视图作为目标。

boolean dispatchTrackballEvent(MotionEvent event)

将轨迹球运动事件传递给焦点视图。

boolean dispatchUnhandledMove(View focused, int direction)

此方法是聚焦视图及其祖先响应箭头键的最后机会。

void dispatchWindowFocusChanged(boolean hasFocus)

当包含此视图的窗口获得或失去窗口焦点时调用。

void dispatchWindowSystemUiVisiblityChanged(int visible)

向视图层次结构调度回调到 onWindowSystemUiVisibilityChanged(int)

void dispatchWindowVisibilityChanged(int visibility)

向视图层次结构中分派窗口可见性更改。

void endViewTransition(View view)

此方法应始终在先调用 startViewTransition(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布局操作期间的对齐基础: LAYOUT_MODE_CLIP_BOUNDSLAYOUT_MODE_OPTICAL_BOUNDS

LayoutTransition getLayoutTransition()

获取此ViewGroup的LayoutTransition对象。

int getNestedScrollAxes()

返回此ViewGroup的嵌套滚动的当前轴。

ViewGroupOverlay getOverlay()

返回此视图组的ViewGroupOverlay,如果它尚不存在,则创建它。

int getPersistentDrawingCache()

返回一个整数,指示将哪些类型的绘图缓存保存在内存中。

boolean getTouchscreenBlocksFocus()

检查此ViewGroup是否应忽略本身及其子项的焦点请求。

boolean hasFocus()

如果此视图具有或包含焦点,则返回true

boolean hasFocusable()

如果此视图是可聚焦的,或者它包含可访问的视图, hasFocusable()返回true,其中 hasFocusable()返回true。

boolean hasTransientState()

指示视图当前是否跟踪暂时状态,即应用程序不需要关心保存和还原,但是框架应该特别注意在可能的情况下保留。

int indexOfChild(View child)

返回指定子视图的组中的位置。

final void invalidateChild(View child, Rect dirty)

不要调用或重写此方法。

ViewParent invalidateChildInParent(int[] location, Rect dirty)

不要调用或重写此方法。

boolean isAlwaysDrawnWithCacheEnabled()

此方法在API级别23中已弃用。从M ,此属性将被忽略。 子视图可能不再允许父母禁用其缓存行为。

boolean isAnimationCacheEnabled()

此方法在API级别23中已弃用。从M ,此属性将被忽略。 儿童的缓存行为可以通过setLayerType(int, Paint)进行控制。

boolean isMotionEventSplittingEnabled()

如果派发到此ViewGroup的MotionEvent可以分割为多个子项,则返回true。

boolean isTransitionGroup()

如果在执行活动转换时应将此ViewGroup视为要删除的单个实体,则返回true。

void jumpDrawablesToCurrentState()

在与此视图关联的所有可绘制对象上调用 Drawable.jumpToCurrentState()

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)

在目标进程处理之前,响应由目标后代视图委托的可访问性操作。

子类应始终调用 super.onNestedPrePerformAccessibilityAction

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)

当一个孩子要求发送一个 AccessibilityEvent并给它的父母机会来增加事件时 AccessibilityEvent

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)

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

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)

当孩子不希望这个父母及其祖先用 onInterceptTouchEvent(MotionEvent)拦截触摸事件时 onInterceptTouchEvent(MotionEvent)

boolean requestFocus(int direction, Rect previouslyFocusedRect)

调用此方法可试图将焦点放在特定视图或其后面的某个子视图上,并提供关于焦点来自的方向和特定矩形的提示。 寻找一个观点,重点关注getDescendantFocusability()指定的设置。

boolean requestSendAccessibilityEvent(View child, AccessibilityEvent event)

由小孩打电话要求其父母发送 AccessibilityEvent

void requestTransparentRegion(View child)

当孩子希望视图层次结构收集并向窗口合成器报告透明区域时调用。

void scheduleLayoutAnimation()

计划布局动画在该视图组的下一个布局通过后播放。

void setAddStatesFromChildren(boolean addsStates)

设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。

void setAlwaysDrawnWithCacheEnabled(boolean always)

此方法在API级别23中已弃用。从M ,此属性将被忽略。 子视图可能不再允许父母禁用其缓存行为。

void setAnimationCacheEnabled(boolean enabled)

此方法在API级别23中已弃用。从M ,此属性将被忽略。 儿童的缓存行为可以通过setLayerType(int, Paint)进行控制。

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)

启动默认类型为 TYPE_PRIMARY的指定视图的操作模式。

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)

在日志输出中打印有关此视图的信息,标记为 VIEW_LOG_TAG

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)

执行 saveHierarchyState(android.util.SparseArray) freeze()派发只给这个视图,而不是它的子项。

boolean dispatchGenericFocusedEvent(MotionEvent event)

将通用运动事件分派给当前的焦点视图。

boolean dispatchGenericPointerEvent(MotionEvent event)

将通用运动事件分配给第一个指针下的视图。

boolean dispatchHoverEvent(MotionEvent event)

发送悬停事件。

void dispatchRestoreInstanceState(SparseArray<Parcelable> container)

restoreHierarchyState(android.util.SparseArray)调用以检索此视图及其子项的状态。

void dispatchSaveInstanceState(SparseArray<Parcelable> container)

saveHierarchyState(android.util.SparseArray)调用以存储此视图及其子项的状态。

void dispatchSetPressed(boolean pressed)

派发setPressed给所有这个View的孩子。

void dispatchThawSelfOnly(SparseArray<Parcelable> container)

执行派遣 restoreHierarchyState(android.util.SparseArray)只能看到这个观点,而不是它的孩子。

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)

t设置为子级的静态转换,如果设置,则返回布尔值以指示是否设置了静态转换。

boolean isChildrenDrawingOrderEnabled()

指示ViewGroup是否按照 getChildDrawingOrder(int, int)定义的顺序绘制其子 getChildDrawingOrder(int, int)

boolean isChildrenDrawnWithCacheEnabled()

此方法在API级别23中已弃用。从M ,此属性将被忽略。 子视图可能不再被父母强制缓存渲染状态。 setLayerType(int, Paint)在个别视图上使用setLayerType(int, Paint)

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)

为此视图生成新的 Drawable状态。

void onDetachedFromWindow()

这是在视图从窗口分离时调用的。

abstract void onLayout(boolean changed, int l, int t, int r, int b)

当这个视图为每个孩子分配一个大小和位置时,从布局调用。

boolean onRequestFocusInDescendants(int direction, Rect previouslyFocusedRect)

寻找一个后裔打电话 requestFocus()

void removeDetachedView(View child, boolean animate)

完成删除分离的视图。

void setChildrenDrawingCacheEnabled(boolean enabled)

为此视图组的每个子项启用或禁用绘图缓存。

void setChildrenDrawingOrderEnabled(boolean enabled)

告诉ViewGroup是否按照方法 getChildDrawingOrder(int, int)定义的顺序绘制子 getChildDrawingOrder(int, int)

void setChildrenDrawnWithCacheEnabled(boolean enabled)

此方法在API级别23中已弃用。从M ,此属性将被忽略。 子视图可能不再被父母强制缓存渲染状态。 setLayerType(int, Paint)在个别视图上使用setLayerType(int, Paint)

void setStaticTransformationsEnabled(boolean enabled)

当此属性设置为true时,此ViewGroup支持儿童的静态转换; 这会导致getChildStaticTransformation(View, android.view.animation.Transformation)在绘制子对象时被调用。

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

XML attributes

android:addStatesFromChildren

设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 addStatesFromChildren

android:alwaysDrawnWithCache

定义ViewGroup是否应始终使用绘图缓存绘制其子节点。 默认值是true。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 alwaysDrawnWithCache

android:animateLayoutChanges

定义布局中的更改(由添加和删除项目引起)是否应导致运行LayoutTransition。 当此标志设置为true时,将在ViewGroup容器上设置默认的LayoutTransition对象,并在发生这些布局更改时运行默认动画。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 animateLayoutChanges

相关方法:

android:animationCache

定义布局动画是否应为其子项创建绘图缓存。 启用动画缓存消耗更多内存,并需要较长的初始化时间,但性能更好。 动画缓存默认启用。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 animationCache

android:clipChildren

定义孩子是否被限制在其范围内绘制。 例如,这对于将儿童的尺寸缩小到100%以上的动画非常有用。 在这种情况下,应该将该属性设置为false以允许孩子在界限之外绘制。 此属性的默认值为true。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 clipChildren

相关方法:

android:clipToPadding

定义如果填充不为零,ViewGroup是否会剪切其子元素并将其大小(但不剪切)任何EdgeEffect填充到其填充。 该属性默认设置为true。

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 clipToPadding

相关方法:

android:descendantFocusability

在查找视图以获得焦点时,定义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

android:layoutAnimation

定义布局动画以在ViewGroup第一次布置时使用。 布局动画也可以在第一个布局之后手动启动。

必须是另一个资源的引用,其形式为“ @[+][package:]type:name ”,或者其形式为“一个主题属性 ?[package:][type:]name ”。

这对应于全局属性资源符号 layoutAnimation

android:layoutMode

定义此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

相关方法:

android:persistentDrawingCache

定义绘图缓存的持久性。 在特定情况下(例如在滚动期间),绘图缓存可能由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

android:splitMotionEvents

设置此ViewGroup是否应在触摸事件分派期间将MotionEvents分割为独立的子视图。 如果为false(默认),触摸事件将被分派到第一个指针下降的子视图,直到最后一个指针上升。 如果为true,则可以将触发事件分派给多个孩子。 每个指针的MotionEvents将被分派到发生初始ACTION_DOWN事件的子视图。 有关更多信息,请参阅setMotionEventSplittingEnabled(boolean)

必须是布尔值,可以是“ true ”或“ false ”。

这也可能是对包含此类型值的资源(形式为“ @[package:]type:name ”)或主题属性(形式为“ ?[package:][type:]name ”)的 ?[package:][type:]name

这对应于全局属性资源符号 splitMotionEvents

相关方法:

Constants

CLIP_TO_PADDING_MASK

Added in API level 1
int CLIP_TO_PADDING_MASK

当FLAG_CLIP_TO_PADDING和FLAG_PADDING_NOT_NULL同时设置时,我们剪裁为填充。

常量值:34(0x00000022)

FOCUS_AFTER_DESCENDANTS

Added in API level 1
int FOCUS_AFTER_DESCENDANTS

只有当它的后代都不需要它时,这个视图才会得到关注。

常量值:262144(0x00040000)

FOCUS_BEFORE_DESCENDANTS

Added in API level 1
int FOCUS_BEFORE_DESCENDANTS

这个观点将在它的任何后代之前得到关注。

常量值:131072(0x00020000)

FOCUS_BLOCK_DESCENDANTS

Added in API level 1
int FOCUS_BLOCK_DESCENDANTS

这种观点将阻止其后代的任何焦点,即使它们是可以聚焦的。

常量值:393216(0x00060000)

LAYOUT_MODE_CLIP_BOUNDS

Added in API level 18
int LAYOUT_MODE_CLIP_BOUNDS

这个常数是layoutMode 剪辑范围是原始值lefttoprightbottom

常量值:0(0x00000000)

LAYOUT_MODE_OPTICAL_BOUNDS

Added in API level 18
int LAYOUT_MODE_OPTICAL_BOUNDS

这个常数是layoutMode 光学边界描述了一个小部件的出现位置。 他们坐在需要覆盖更大区域的剪辑边界内,以便绘制其他效果,例如阴影和发光。

常数值:1(0x00000001)

PERSISTENT_ALL_CACHES

Added in API level 1
int PERSISTENT_ALL_CACHES

用于指示所有绘图缓存应保存在内存中。

常量值:3(0x00000003)

PERSISTENT_ANIMATION_CACHE

Added in API level 1
int PERSISTENT_ANIMATION_CACHE

用于指示动画制图缓存应保存在内存中。

常数值:1(0x00000001)

PERSISTENT_NO_CACHE

Added in API level 1
int PERSISTENT_NO_CACHE

用于指示绘图缓存不应保存在内存中。

常量值:0(0x00000000)

PERSISTENT_SCROLLING_CACHE

Added in API level 1
int PERSISTENT_SCROLLING_CACHE

用于指示滚动图形缓存应保存在内存中。

常量值:2(0x00000002)

Public constructors

ViewGroup

Added in API level 1
ViewGroup (Context context)

Parameters
context Context

ViewGroup

Added in API level 1
ViewGroup (Context context, 
                AttributeSet attrs)

Parameters
context Context
attrs AttributeSet

ViewGroup

Added in API level 1
ViewGroup (Context context, 
                AttributeSet attrs, 
                int defStyleAttr)

Parameters
context Context
attrs AttributeSet
defStyleAttr int

ViewGroup

Added in API level 21
ViewGroup (Context context, 
                AttributeSet attrs, 
                int defStyleAttr, 
                int defStyleRes)

Parameters
context Context
attrs AttributeSet
defStyleAttr int
defStyleRes int

Public methods

addChildrenForAccessibility

Added in API level 16
void addChildrenForAccessibility (ArrayList<View> outChildren)

将此视图的子项添加到给定列表的可访问性中作为输出。 由于一些视图对可访问性并不重要,因此添加的子视图不一定是这种视图的直接子项,而是它们是对可访问性很重要的第一级子孙。

Parameters
outChildren ArrayList: The output list that will receive children for accessibility.

addFocusables

Added in API level 4
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.

addStatesFromChildren

Added in API level 1
boolean addStatesFromChildren ()

返回此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。

Returns
boolean

addTouchables

Added in API level 1
void addTouchables (ArrayList<View> views)

添加这个视图的后代的任何可触摸的视图(如果它可以自己触摸,可能包括这个视图)到视图。

Parameters
views ArrayList: Touchable views found so far

addView

Added in API level 1
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

addView

Added in API level 1
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

也可以看看:

addView

Added in API level 1
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

addView

Added in API level 1
void addView (View child)

添加子视图。 如果没有设置布局参数,则此子视图的默认参数设置在该子级上。

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

Parameters
child View: the child view to add

也可以看看:

addView

Added in API level 1
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

bringChildToFront

Added in API level 1
void bringChildToFront (View child)

更改孩子的z顺序,使其位于所有其他孩子的顶部。 如果此容器使用依赖于订单的布局方案(例如,LinearLayout),则此排序更改可能会影响布局。 KITKAT之前,应在此方法之后调用requestLayout()invalidate()以强制父级重新绘制新的子级顺序。

Parameters
child View: The child to bring to the top of the z order

childDrawableStateChanged

Added in API level 1
void childDrawableStateChanged (View child)

如果 addStatesFromChildren()为true,则刷新该组的可绘制状态(以包含来自子项的状态)。

Parameters
child View: The child whose drawable state has changed.

childHasTransientStateChanged

Added in API level 19
void childHasTransientStateChanged (View child, 
                boolean childHasTransientState)

当子视图发生变化时调用,无论它是否跟踪瞬态。

Parameters
child View: Child view whose state has changed
childHasTransientState boolean: true if this child has transient state

clearChildFocus

Added in API level 1
void clearChildFocus (View child)

当该父母的一个孩子放弃焦点时调用

Parameters
child View: The view that is giving up focus

clearDisappearingChildren

Added in API level 1
void clearDisappearingChildren ()

删除已删除的视图的任何待定动画。 如果您不希望将退出视图的动画叠加起来,请调用此方法。

clearFocus

Added in API level 1
void clearFocus ()

当这个观点想要放弃焦点时调用。 如果焦点被清除,则调用onFocusChanged(boolean, int, android.graphics.Rect)

注意:当一个视图清除焦点时,框架试图将焦点放在顶部的第一个可聚焦视图上。 因此,如果这个视图是第一个可以关注焦点的视图,那么所有与清除焦点相关的回调都将被调用,之后框架将把焦点放在这个视图上。

dispatchApplyWindowInsets

Added in API level 20
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

dispatchConfigurationChanged

Added in API level 8
void dispatchConfigurationChanged (Configuration newConfig)

在视图层次结构下分发有关资源配置更改的通知。 ViewGroups应该覆盖路由到他们的孩子。

Parameters
newConfig Configuration: The new resource configuration.

dispatchDisplayHint

Added in API level 8
void dispatchDisplayHint (int hint)

发出是否显示此视图的提示。 例如,当视图移出屏幕时,它可能会收到显示提示,指示视图不显示。 应用程序不应该依赖这个提示,因为不能保证他们会收到一个。

Parameters
hint int: A hint about whether or not this view is displayed: VISIBLE or INVISIBLE.

dispatchDragEvent

Added in API level 11
boolean dispatchDragEvent (DragEvent event)

检测此视图是否已启用并具有拖动事件侦听器。 如果两者都为真,则它会使用它收到的DragEvent调用拖动事件侦听器。 如果拖动事件侦听器返回true ,则dispatchDragEvent()返回true

对于所有其他情况,该方法调用 onDragEvent()拖动事件处理程序方法并返回其结果。

这确保了拖动事件总是被消耗,即使View没有拖动事件监听器。 但是,如果View具有侦听器并且侦听器返回true,则不会调用onDragEvent()。

Parameters
event DragEvent
Returns
boolean

dispatchDrawableHotspotChanged

Added in API level 22
void dispatchDrawableHotspotChanged (float x, 
                float y)

将可绘制的热点更改分派到满足以下至少一个条件的子视图:

Parameters
x float: hotspot x coordinate
y float: hotspot y coordinate

也可以看看:

dispatchKeyEvent

Added in API level 1
boolean dispatchKeyEvent (KeyEvent event)

将关键事件分派到焦点路径上的下一个视图。 此路径从视图树的顶部向下延伸到当前聚焦的视图。 如果这个观点有重点,它会发送给自己。 否则,它将沿着焦点路径调度下一个节点。 这个方法也会触发任何关键的监听器。

Parameters
event KeyEvent: The key event to be dispatched.
Returns
boolean True if the event was handled, false otherwise.

dispatchKeyEventPreIme

Added in API level 3
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.

dispatchKeyShortcutEvent

Added in API level 1
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.

dispatchProvideStructure

Added in API level 23
void dispatchProvideStructure (ViewStructure structure)

在层次结构中调度创建ViewStructure 除了调用默认的View实现外,此实现还添加了视图组的所有子视图。

Parameters
structure ViewStructure

dispatchSetActivated

Added in API level 11
void dispatchSetActivated (boolean activated)

派发setActivated给所有这个View的孩子。

Parameters
activated boolean: The new activated state

dispatchSetSelected

Added in API level 1
void dispatchSetSelected (boolean selected)

调度setSelected选择到所有这个View的孩子。

Parameters
selected boolean: The new selected state

dispatchSystemUiVisibilityChanged

Added in API level 11
void dispatchSystemUiVisibilityChanged (int visible)

在视图层次结构下调度回调到 setOnSystemUiVisibilityChangeListener(View.OnSystemUiVisibilityChangeListener)

Parameters
visible int

dispatchTouchEvent

Added in API level 1
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.

dispatchTrackballEvent

Added in API level 1
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.

dispatchUnhandledMove

Added in API level 1
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.

dispatchWindowFocusChanged

Added in API level 1
void dispatchWindowFocusChanged (boolean hasFocus)

当包含此视图的窗口获得或失去窗口焦点时调用。 ViewGroups应该覆盖路由到他们的孩子。

Parameters
hasFocus boolean: True if the window containing this view now has focus, false otherwise.

dispatchWindowSystemUiVisiblityChanged

Added in API level 16
void dispatchWindowSystemUiVisiblityChanged (int visible)

在视图层次结构中调用回调到 onWindowSystemUiVisibilityChanged(int)

Parameters
visible int

dispatchWindowVisibilityChanged

Added in API level 1
void dispatchWindowVisibilityChanged (int visibility)

向视图层次结构中分派窗口可见性更改。 ViewGroups应该覆盖路由到他们的孩子。

Parameters
visibility int: The new visibility of the window.

endViewTransition

Added in API level 11
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).

findFocus

Added in API level 1
View findFocus ()

在当前拥有焦点的此视图中植根的层次结构中查找视图。

Returns
View The view that currently has focus, or null if no focused view can be found.

findViewsWithText

Added in API level 14
void findViewsWithText (ArrayList<View> outViews, 
                CharSequence text, 
                int flags)

查找包含给定文本的视图。 遏制是不区分大小写的。 搜索由视图呈现的文本或描述视图的内容描述执行,以实现辅助功能,视图不呈现或两者兼而有之。 客户可以指定如何通过传递FIND_VIEWS_WITH_TEXTFIND_VIEWS_WITH_CONTENT_DESCRIPTION标志来执行搜索。

Parameters
outViews ArrayList: The output list of matching Views.
text CharSequence: The text to match against.
flags int

focusSearch

Added in API level 1
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

focusableViewAvailable

Added in API level 1
void focusableViewAvailable (View v)

告诉家长,新的可调焦视图已经可用。 这是为了处理从没有可聚焦视图的情况到第一个可聚焦视图出现的情况的转换。

Parameters
v View: The view that has become newly focusable

gatherTransparentRegion

Added in API level 1
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.

generateLayoutParams

Added in API level 1
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

getAccessibilityClassName

Added in API level 23
CharSequence getAccessibilityClassName ()

返回此对象的类名称以用于辅助功能。 如果子类正在实现的东西应该被视为一个全新的视图类,当它被可访问性使用时,子类只应该覆盖这个子类,与它所源自的类无关。 这用于填写AccessibilityNodeInfo.setClassName

Returns
CharSequence

getChildAt

Added in API level 1
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

getChildCount

Added in API level 1
int getChildCount ()

返回组中的子女数量。

Returns
int a positive integer representing the number of children in the group

getChildMeasureSpec

Added in API level 1
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

getChildVisibleRect

Added in API level 1
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

getClipChildren

Added in API level 18
boolean getClipChildren ()

返回绘制前是否将该组的子项剪切到其边界。 默认值是true。

Returns
boolean True if the group's children will be clipped to their bounds, false otherwise.

也可以看看:

getClipToPadding

Added in API level 21
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.

getDescendantFocusability

Added in API level 1
int getDescendantFocusability ()

获取此视图组的后代可聚焦性。 后代可聚焦限定寻找一个视图采取集中在当该视图组及其后代之间的关系requestFocus(int, android.graphics.Rect)

Returns
int one of FOCUS_BEFORE_DESCENDANTS, FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS.

getFocusedChild

Added in API level 1
View getFocusedChild ()

返回此视图的重点子项(如果有)。 孩子可能有焦点或含有焦点。

Returns
View the focused child or null.

getLayoutAnimation

Added in API level 1
LayoutAnimationController getLayoutAnimation ()

返回用于动画组的子节点的布局动画控制器。

Returns
LayoutAnimationController the current animation controller

getLayoutAnimationListener

Added in API level 1
Animation.AnimationListener getLayoutAnimationListener ()

返回布局动画事件发送到的动画侦听器。

Returns
Animation.AnimationListener an Animation.AnimationListener

getLayoutMode

Added in API level 18
int getLayoutMode ()

返回此ViewGroup在布局操作期间的对齐基础: LAYOUT_MODE_CLIP_BOUNDSLAYOUT_MODE_OPTICAL_BOUNDS

如果未以编程方式或在XML资源中明确设置layoutMode,则此方法返回视图的父ViewGroup的layoutMode(如果存在此父级),否则此方法返回默认值 LAYOUT_MODE_CLIP_BOUNDS

Returns
int the layout mode to use during layout operations

也可以看看:

getLayoutTransition

Added in API level 11
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.

getNestedScrollAxes

Added in API level 21
int getNestedScrollAxes ()

返回此ViewGroup的嵌套滚动的当前轴。

返回非 SCROLL_AXIS_NONE之外的ViewGroup当前充当层次结构中一个或多个后代视图的嵌套滚动父项。

Returns
int Flags indicating the current axes of nested scrolling

也可以看看:

getOverlay

Added in API level 18
ViewGroupOverlay getOverlay ()

返回此视图组的ViewGroupOverlay,如果它尚不存在,则创建它。 除了ViewOverlay对drawable的支持之外, ViewGroupOverlay允许将视图添加到叠加层。 这些视图,如叠加可绘制视图,仅供视觉使用; 它们不会接收输入事件,也不应该用作父容器中视图的临时表示以外的任何其他内容,例如可能会被动画效果使用。

注意:叠加层目前不能正确使用SurfaceViewTextureView ; 这些类型视图的重叠内容可能无法正确显示。

Returns
ViewGroupOverlay The ViewGroupOverlay object for this view.

也可以看看:

getPersistentDrawingCache

Added in API level 1
int getPersistentDrawingCache ()

返回一个整数,指示将哪些类型的绘图缓存保存在内存中。

Returns
int one or a combination of PERSISTENT_NO_CACHE, PERSISTENT_ANIMATION_CACHE, PERSISTENT_SCROLLING_CACHE and PERSISTENT_ALL_CACHES

也可以看看:

getTouchscreenBlocksFocus

Added in API level 21
boolean getTouchscreenBlocksFocus ()

检查此ViewGroup是否应忽略本身及其子项的焦点请求。

Returns
boolean

hasFocus

Added in API level 1
boolean hasFocus ()

如果此视图具有或包含焦点,则返回true

Returns
boolean true if this view has or contains focus

hasFocusable

Added in API level 1
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.

hasTransientState

Added in API level 16
boolean hasTransientState ()

指示视图当前是否跟踪暂时状态,即应用程序不需要关心保存和还原,但是框架应该特别注意在可能的情况下保留。

具有临时状态的视图不能从外部数据源轻松地重新启动,例如列表中的适配器绑定项目视图。 这可能是因为视图正在执行动画,跟踪用户对内容的选择等。

Returns
boolean true if the view has transient state

indexOfChild

Added in API level 1
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

invalidateChild

Added in API level 1
void invalidateChild (View child, 
                Rect dirty)

不要调用或重写此方法。 它用于实现视图层次结构。

Parameters
child View: The child which is dirty
dirty Rect: The area within the child that is invalid

invalidateChildInParent

Added in API level 1
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

isAlwaysDrawnWithCacheEnabled

Added in API level 1
boolean isAlwaysDrawnWithCacheEnabled ()

此方法在API级别23中已弃用。
M ,该属性被忽略。 子视图可能不再允许父母禁用其缓存行为。

指示此ViewGroup是否总是尝试使用其绘图缓存来绘制其子级。 默认情况下,此属性已启用。

Returns
boolean true if the animation cache is enabled, false otherwise

也可以看看:

isAnimationCacheEnabled

Added in API level 1
boolean isAnimationCacheEnabled ()

此方法在API级别23中已弃用。
M ,该属性被忽略。 儿童的缓存行为可通过setLayerType(int, Paint)进行控制。

指示在布局动画期间是否使用儿童的绘图缓存。 默认情况下,绘图缓存已启用,但这会阻止嵌套布局动画的运行。 要嵌套动画,您必须禁用缓存。

Returns
boolean true if the animation cache is enabled, false otherwise

也可以看看:

isMotionEventSplittingEnabled

Added in API level 11
boolean isMotionEventSplittingEnabled ()

如果派发到此ViewGroup的MotionEvent可以分割为多个子项,则返回true。

Returns
boolean true if MotionEvents dispatched to this ViewGroup can be split to multiple children.

isTransitionGroup

Added in API level 21
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.

jumpDrawablesToCurrentState

Added in API level 11
void jumpDrawablesToCurrentState ()

在与此视图关联的所有可绘制对象上调用 Drawable.jumpToCurrentState()

如果有一个StateListAnimator附加到这个视图,也调用 jumpToCurrentState()

layout

Added in API level 1
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

notifySubtreeAccessibilityStateChanged

Added in API level 19
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:

offsetDescendantRectToMyCoords

Added in API level 1
void offsetDescendantRectToMyCoords (View descendant, 
                Rect rect)

将位于后代坐标空间中的矩形偏移到我们的坐标空间中。

Parameters
descendant View: A descendant of this view
rect Rect: A rectangle defined in descendant's coordinate space.

offsetRectIntoDescendantCoords

Added in API level 1
void offsetRectIntoDescendantCoords (View descendant, 
                Rect rect)

将坐标空间中的矩形偏移到祖先的坐标空间中。

Parameters
descendant View: A descendant of this view
rect Rect: A rectangle defined in descendant's coordinate space.

onInterceptHoverEvent

Added in API level 14
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.

onInterceptTouchEvent

Added in API level 1
boolean onInterceptTouchEvent (MotionEvent ev)

实施此方法来拦截所有触摸屏幕动作事件。 这允许您在事件发送给您的孩子时观看事件,并在任何时候掌握当前手势的所有权。

使用这个函数需要注意,因为它与View.onTouchEvent(MotionEvent)有一个相当复杂的交互,并且使用它需要以正确的方式执行该方法。 活动将按以下顺序收到:

  1. You will receive the down event here.
  2. The down event will be handled either by a child of this view group, or given to your own onTouchEvent() method to handle; this means you should implement onTouchEvent() to return true, so you will continue to see the rest of the gesture (instead of looking for a parent view to handle it). Also, by returning true from onTouchEvent(), you will not receive any following events in onInterceptTouchEvent() and all touch processing must happen in onTouchEvent() like normal.
  3. For as long as you return false from this function, each following event (up to and including the final up) will be delivered first here and then to the target's onTouchEvent().
  4. If you return true from here, you will not receive any following events: the target view will receive the same event but with the action 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.

onNestedFling

Added in API level 21
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

onNestedPreFling

Added in API level 21
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

onNestedPrePerformAccessibilityAction

Added in API level 22
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.

onNestedPreScroll

Added in API level 21
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

onNestedScroll

Added in API level 21
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

onNestedScrollAccepted

Added in API level 21
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

onRequestSendAccessibilityEvent

Added in API level 14
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.

也可以看看:

onResolvePointerIcon

Added in API level 24
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

onStartNestedScroll

Added in API level 21
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

onStopNestedScroll

Added in API level 21
void onStopNestedScroll (View child)

反应到嵌套滚动操作结束。

在嵌套滚动操作后执行清理。 此方法将在嵌套滚动停止时调用,例如,当嵌套触摸滚动以ACTION_UPACTION_CANCEL事件结束时。 如果存在这种方法的实现,则应始终调用其超类的此方法的实现。

Parameters
child View: View that initiated the nested scroll

onViewAdded

Added in API level 23
void onViewAdded (View child)

当新的孩子被添加到这个ViewGroup时调用。 覆盖应该总是调用super.onViewAdded。

Parameters
child View: the added child view

onViewRemoved

Added in API level 23
void onViewRemoved (View child)

当从此ViewGroup中移除子视图时调用。 覆盖应该总是调用super.onViewRemoved。

Parameters
child View: the removed child view

recomputeViewAttributes

Added in API level 1
void recomputeViewAttributes (View child)

告诉视图层次结构,需要重新评估全局视图属性。

Parameters
child View: View whose attributes have changed.

removeAllViews

Added in API level 1
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.

removeAllViewsInLayout

Added in API level 1
void removeAllViewsInLayout ()

由ViewGroup子类调用以从其自身中删除子视图时,它必须首先知道其屏幕大小,然后才能计算它将呈现多少个子视图。 一个例子是一个图库或一个ListView,它可能“有”50个孩子,但实际上只渲染当前可以放入屏幕上的对象内的孩子的数量。 除非您扩展ViewGroup并理解视图测量和布局管道,否则不要调用此方法。

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

removeView

Added in API level 1
void removeView (View view)

注意:不要调用此方法 draw(android.graphics.Canvas)onDraw(android.graphics.Canvas)dispatchDraw(android.graphics.Canvas)或任何相关方法。

Parameters
view View

removeViewAt

Added in API level 1
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

removeViewInLayout

Added in API level 1
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

removeViews

Added in API level 1
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

removeViewsInLayout

Added in API level 1
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

requestChildFocus

Added in API level 1
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

requestChildRectangleOnScreen

Added in API level 1
boolean requestChildRectangleOnScreen (View child, 
                Rect rectangle, 
                boolean immediate)

当该组的小孩想要将特定矩形定位到屏幕上时调用。 ViewGroup重写这可以相信:

  • child will be a direct child of this group
  • rectangle will be in the child's content coordinates

ViewGroup的压倒一切应该维护合同:

  • nothing will change if the rectangle is already visible
  • the view port will be scrolled only just enough to make the rectangle visible
    • 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

requestDisallowInterceptTouchEvent

Added in API level 1
void requestDisallowInterceptTouchEvent (boolean disallowIntercept)

当孩子不希望这个父母及其祖先用 onInterceptTouchEvent(MotionEvent)拦截触摸事件时 onInterceptTouchEvent(MotionEvent)

这位家长应该将此通知传递给其父母。 这位家长必须在接触期间服从这个要求(也就是说,只有在这位家长收到了或取消后才清除标志。

Parameters
disallowIntercept boolean: True if the child does not want the parent to intercept touch events.

requestFocus

Added in API level 1
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.

也可以看看:

requestSendAccessibilityEvent

Added in API level 14
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.

requestTransparentRegion

Added in API level 1
void requestTransparentRegion (View child)

当孩子希望视图层次结构收集并向窗口合成器报告透明区域时调用。 在视图层次结构中“打洞”的视图(如SurfaceView)可以使用此API来提高系统的性能。 当层次结构中不存在这样的视图时,这种优化不必要,可能会略微降低视图层次结构的性能。

Parameters
child View: the view requesting the transparent region computation

scheduleLayoutAnimation

Added in API level 1
void scheduleLayoutAnimation ()

计划布局动画在该视图组的下一个布局通过后播放。 这可用于在视图组的内容发生更改或活动暂停和恢复时重新启动布局动画。

setAddStatesFromChildren

Added in API level 1
void setAddStatesFromChildren (boolean addsStates)

设置此ViewGroup的可绘制状态是否也包含其子项的可绘制状态。 例如,这用于使组的子EditText或按钮关注时显示为一个组。

Parameters
addsStates boolean

setAlwaysDrawnWithCacheEnabled

Added in API level 1
void setAlwaysDrawnWithCacheEnabled (boolean always)

此方法在API级别23中已弃用。
M ,该属性被忽略。 子视图可能不再允许父母禁用其缓存行为。

指示此ViewGroup是否总是尝试使用其绘图缓存来绘制其子级。 当缓存渲染与孩子的正常渲染稍有不同时,该属性可以设置为true。 例如,当缓存的质量设置为低时,渲染可能会有所不同。 当此属性被禁用时,ViewGroup仅在被要求时才使用其子图的绘图缓存。 通常,子类的任务是告诉ViewGroup何时开始使用绘图缓存以及何时停止使用它。

Parameters
always boolean: true to always draw with the drawing cache, false otherwise

也可以看看:

setAnimationCacheEnabled

Added in API level 1
void setAnimationCacheEnabled (boolean enabled)

此方法在API级别23中已弃用。
M ,该属性被忽略。 通过setLayerType(int, Paint)可以控制儿童的缓存行为。

在布局动画中启用或禁用儿童的绘图缓存。 默认情况下,绘图缓存已启用,但这会阻止嵌套布局动画的运行。 要嵌套动画,您必须禁用缓存。

Parameters
enabled boolean: true to enable the animation cache, false otherwise

也可以看看:

setClipChildren

Added in API level 1
void setClipChildren (boolean clipChildren)

默认情况下,在绘制之前,儿童将被剪裁到其边界。 这允许视图组为动画等覆盖此行为。

相关XML属性:

Parameters
clipChildren boolean: true to clip children to their bounds, false otherwise

setClipToPadding

Added in API level 1
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.

setDescendantFocusability

Added in API level 1
void setDescendantFocusability (int focusability)

设置此视图组的后代可聚焦性。 当在requestFocus(int, android.graphics.Rect)寻找焦点时,这定义了该视图组与其后代之间的关系。

Parameters
focusability int: one of FOCUS_BEFORE_DESCENDANTS, FOCUS_AFTER_DESCENDANTS, FOCUS_BLOCK_DESCENDANTS.

setLayoutAnimation

Added in API level 1
void setLayoutAnimation (LayoutAnimationController controller)

设置用于在第一个布局之后为组的子项设置动画效果的布局动画控制器。

Parameters
controller LayoutAnimationController: the animation controller

setLayoutAnimationListener

Added in API level 1
void setLayoutAnimationListener (Animation.AnimationListener animationListener)

指定必须向其发送布局动画事件的动画侦听器。 只有onAnimationStart(Animation)onAnimationEnd(Animation)被调用。

Parameters
animationListener Animation.AnimationListener: the layout animation listener

setLayoutMode

Added in API level 18
void setLayoutMode (int layoutMode)

设置此ViewGroup布局过程中的对齐基础。 有效值为LAYOUT_MODE_CLIP_BOUNDSLAYOUT_MODE_OPTICAL_BOUNDS

相关XML属性:

Parameters
layoutMode int: the layout mode to use during layout operations

也可以看看:

setLayoutTransition

Added in API level 11
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.

setMotionEventSplittingEnabled

Added in API level 11
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.

setOnHierarchyChangeListener

Added in API level 1
void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)

当一个孩子被添加到这个视图或从这个视图中删除时注册一个回调被调用。

Parameters
listener ViewGroup.OnHierarchyChangeListener: the callback to invoke on hierarchy change

setPersistentDrawingCache

Added in API level 1
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

也可以看看:

setTouchscreenBlocksFocus

Added in API level 21
void setTouchscreenBlocksFocus (boolean touchscreenBlocksFocus)

设置此ViewGroup是否应忽略本身及其子项的焦点请求。 如果启用此选项并且ViewGroup或后代目前拥有焦点,则焦点将继续前进。

Parameters
touchscreenBlocksFocus boolean: true to enable blocking focus in the presence of a touchscreen

setTransitionGroup

Added in API level 21
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.

也可以看看:

shouldDelayChildPressedState

Added in API level 14
boolean shouldDelayChildPressedState ()

如果应该延迟此ViewGroup的子项或后代的按下状态,则返回true。 通常,这应该对可以滚动的容器(例如List)完成。 这可以防止在用户实际尝试滚动内容时出现按下状态。 出于兼容性原因,默认实现返回true。 不滚动的子类通常应该重写此方法并返回false。

Returns
boolean

showContextMenuForChild

Added in API level 24
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

showContextMenuForChild

Added in API level 1
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

startActionModeForChild

Added in API level 23
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

startActionModeForChild

Added in API level 11
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

startLayoutAnimation

Added in API level 1
void startLayoutAnimation ()

运行布局动画。 调用此方法会触发此视图组的重新布局。

startViewTransition

Added in API level 11
void startViewTransition (View view)

此方法告诉ViewGroup,即使ViewGroup已从其父项中移除,应将ViewGroup作为其父项的给定View对象应保留(在ViewGroup绘制其子项时重新显示)。 这允许动画(例如由FragmentLayoutTransition使用的动画)去除视图的动画。 对这个方法的调用应该总是伴随着以后对endViewTransition(View)调用,比如在View上的动画完成之后,这样View最终被移除。

Parameters
view View: The View object to be kept visible even if it gets removed from its parent.

updateViewLayout

Added in API level 1
void updateViewLayout (View view, 
                ViewGroup.LayoutParams params)

Parameters
view View
params ViewGroup.LayoutParams

Protected methods

addViewInLayout

Added in API level 1
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

addViewInLayout

Added in API level 1
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

attachLayoutAnimationParameters

Added in API level 1
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

attachViewToParent

Added in API level 1
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

也可以看看:

canAnimate

Added in API level 1
boolean canAnimate ()

指示视图组是否能够在第一个布局之后为其子项设置动画。

Returns
boolean true if the children can be animated, false otherwise

checkLayoutParams

Added in API level 1
boolean checkLayoutParams (ViewGroup.LayoutParams p)

Parameters
p ViewGroup.LayoutParams
Returns
boolean

cleanupLayoutState

Added in API level 1
void cleanupLayoutState (View child)

防止在下一个布局过程中指定的子级布局。

Parameters
child View: the child on which to perform the cleanup

debug

Added in API level 1
void debug (int depth)

在日志输出中打印有关此视图的信息,标记为VIEW_LOG_TAG 输出中的每一行前都有一个由depth定义的depth

Parameters
depth int: the indentation level

detachAllViewsFromParent

Added in API level 1
void detachAllViewsFromParent ()

从父项分离所有视图。 请拨attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)或致电removeDetachedView(View, boolean)attachViewToParent(View, int, android.view.ViewGroup.LayoutParams)removeDetachedView(View, boolean) 支队应该只是暂时的; 重新附着或去除应该在与分离相同的绘制周期内发生。 当视图分离时,其父项为空,无法通过调用getChildAt(int)进行检索。

也可以看看:

detachViewFromParent

Added in API level 1
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

也可以看看:

detachViewFromParent

Added in API level 1
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

也可以看看:

detachViewsFromParent

Added in API level 1
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

也可以看看:

dispatchDraw

Added in API level 1
void dispatchDraw (Canvas canvas)

通过绘制来绘制子视图。 这可能会被派生类重写,以便在子对象被绘制之前获得控制权(但在绘制自己的视图之后)。

Parameters
canvas Canvas: the canvas on which to draw the view

dispatchFreezeSelfOnly

Added in API level 1
void dispatchFreezeSelfOnly (SparseArray<Parcelable> container)

执行saveHierarchyState(android.util.SparseArray) freeze()派发只给这个视图,而不是它的子项。 用于覆盖dispatchSaveInstanceState(android.util.SparseArray) dispatchFreeze()}以允许子类冻结其自己的状态,但不冻结其子级的状态。

Parameters
container SparseArray: the container

dispatchGenericFocusedEvent

Added in API level 14
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.

dispatchGenericPointerEvent

Added in API level 14
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.

dispatchHoverEvent

Added in API level 14
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.

dispatchRestoreInstanceState

Added in API level 1
void dispatchRestoreInstanceState (SparseArray<Parcelable> container)

restoreHierarchyState(android.util.SparseArray)调用以检索此视图及其子项的状态。 可能会被覆盖以修改对视图的子项进行恢复的方式; 例如,一些视图可能不想为他们的孩子存储状态。

Parameters
container SparseArray: The SparseArray which holds previously saved state.

dispatchSaveInstanceState

Added in API level 1
void dispatchSaveInstanceState (SparseArray<Parcelable> container)

saveHierarchyState(android.util.SparseArray)调用以存储此视图及其子项的状态。 可能会被忽略,以修改视图的孩子发生冻结的情况; 例如,一些视图可能不想为他们的孩子存储状态。

Parameters
container SparseArray: The SparseArray in which to save the view's state.

dispatchSetPressed

Added in API level 1
void dispatchSetPressed (boolean pressed)

派发setPressed给所有这个View的孩子。

Parameters
pressed boolean: The new pressed state

dispatchThawSelfOnly

Added in API level 1
void dispatchThawSelfOnly (SparseArray<Parcelable> container)

执行派遣restoreHierarchyState(android.util.SparseArray)只有这个看法,而不是它的孩子。 用于覆盖dispatchRestoreInstanceState(android.util.SparseArray)以允许子类解冻他们自己的状态,但不解释其子女的状态。

Parameters
container SparseArray: the container

dispatchVisibilityChanged

Added in API level 8
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.

drawChild

Added in API level 1
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

drawableStateChanged

Added in API level 1
void drawableStateChanged ()

只要视图的状态发生变化,就会调用此函数,使得它影响所显示的可绘制状态。

如果View有一个StateListAnimator,它也将被调用来运行必要的状态改变动画。

重写此功能时,一定要调用超类。

generateDefaultLayoutParams

Added in API level 1
ViewGroup.LayoutParams generateDefaultLayoutParams ()

返回一组默认布局参数。 当传递给addView(View)的视图没有设置布局参数时,请求这些参数。 如果返回null,则会从addView引发异常。

Returns
ViewGroup.LayoutParams a set of default layout parameters or null

generateLayoutParams

Added in API level 1
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

getChildDrawingOrder

Added in API level 1
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.

也可以看看:

getChildStaticTransformation

Added in API level 1
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

也可以看看:

isChildrenDrawingOrderEnabled

Added in API level 7
boolean isChildrenDrawingOrderEnabled ()

指示ViewGroup是否按照 getChildDrawingOrder(int, int)定义的顺序绘制其子 getChildDrawingOrder(int, int)

Returns
boolean true if children drawing order is defined by getChildDrawingOrder(int, int), false otherwise

也可以看看:

isChildrenDrawnWithCacheEnabled

Added in API level 1
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

也可以看看:

measureChild

Added in API level 1
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

measureChildWithMargins

Added in API level 1
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)

measureChildren

Added in API level 1
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

onAttachedToWindow

Added in API level 1
void onAttachedToWindow ()

这在视图附加到窗口时被调用。 此时它有一个Surface并将开始绘制。 注意这个函数保证在onDraw(android.graphics.Canvas)之前被调用,但是它可以在第一个onDraw之前的任何时候被调用 - 包括在onMeasure(int, int)之前或之后。

onCreateDrawableState

Added in API level 1
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.

onDetachedFromWindow

Added in API level 1
void onDetachedFromWindow ()

这是在视图从窗口分离时调用的。 此时它不再有绘图表面。

onLayout

Added in API level 1
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

onRequestFocusInDescendants

Added in API level 1
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.

removeDetachedView

Added in API level 1
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

也可以看看:

setChildrenDrawingCacheEnabled

Added in API level 1
void setChildrenDrawingCacheEnabled (boolean enabled)

为此视图组的每个子项启用或禁用绘图缓存。

Parameters
enabled boolean: true to enable the cache, false to dispose of it

setChildrenDrawingOrderEnabled

Added in API level 7
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

也可以看看:

setChildrenDrawnWithCacheEnabled

Added in API level 1
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

也可以看看:

setStaticTransformationsEnabled

Added in API level 3
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.

也可以看看:

Hooray!