public final class

GravityCompat

extends java.lang.Object

 java.lang.Object

↳androidx.core.view.GravityCompat

Gradle dependencies

compile group: 'androidx.core', name: 'core', version: '1.9.0-alpha04'

  • groupId: androidx.core
  • artifactId: core
  • version: 1.9.0-alpha04

Artifact androidx.core:core:1.9.0-alpha04 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.core:core com.android.support:support-compat

Androidx class mapping:

androidx.core.view.GravityCompat android.support.v4.view.GravityCompat

Overview

Compatibility shim for accessing newer functionality from .

Summary

Fields
public static final intEND

Push object to x-axis position at the end of its container, not changing its size.

public static final intRELATIVE_HORIZONTAL_GRAVITY_MASK

Binary mask for the horizontal gravity and script specific direction bit.

public static final intRELATIVE_LAYOUT_DIRECTION

Raw bit controlling whether the layout direction is relative or not (START/END instead of absolute LEFT/RIGHT).

public static final intSTART

Push object to x-axis position at the start of its container, not changing its size.

Methods
public static voidapply(int gravity, int w, int h, Rect container, int xAdj, int yAdj, Rect outRect, int layoutDirection)

Apply a gravity constant to an object.

public static voidapply(int gravity, int w, int h, Rect container, Rect outRect, int layoutDirection)

Apply a gravity constant to an object and take care if layout direction is RTL or not.

public static voidapplyDisplay(int gravity, Rect display, Rect inoutObj, int layoutDirection)

Apply additional gravity behavior based on the overall "display" that an object exists in.

public static intgetAbsoluteGravity(int gravity, int layoutDirection)

Convert script specific gravity to absolute horizontal value.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Fields

public static final int RELATIVE_LAYOUT_DIRECTION

Raw bit controlling whether the layout direction is relative or not (START/END instead of absolute LEFT/RIGHT).

public static final int START

Push object to x-axis position at the start of its container, not changing its size.

public static final int END

Push object to x-axis position at the end of its container, not changing its size.

public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK

Binary mask for the horizontal gravity and script specific direction bit.

Methods

public static void apply(int gravity, int w, int h, Rect container, Rect outRect, int layoutDirection)

Apply a gravity constant to an object and take care if layout direction is RTL or not.

Parameters:

gravity: The desired placement of the object, as defined by the constants in this class.
w: The horizontal size of the object.
h: The vertical size of the object.
container: The frame of the containing space, in which the object will be placed. Should be large enough to contain the width and height of the object.
outRect: Receives the computed frame of the object in its container.
layoutDirection: The layout direction.

See also: ViewCompat.LAYOUT_DIRECTION_LTR, ViewCompat.LAYOUT_DIRECTION_RTL

public static void apply(int gravity, int w, int h, Rect container, int xAdj, int yAdj, Rect outRect, int layoutDirection)

Apply a gravity constant to an object.

Parameters:

gravity: The desired placement of the object, as defined by the constants in this class.
w: The horizontal size of the object.
h: The vertical size of the object.
container: The frame of the containing space, in which the object will be placed. Should be large enough to contain the width and height of the object.
xAdj: Offset to apply to the X axis. If gravity is LEFT this pushes it to the right; if gravity is RIGHT it pushes it to the left; if gravity is CENTER_HORIZONTAL it pushes it to the right or left; otherwise it is ignored.
yAdj: Offset to apply to the Y axis. If gravity is TOP this pushes it down; if gravity is BOTTOM it pushes it up; if gravity is CENTER_VERTICAL it pushes it down or up; otherwise it is ignored.
outRect: Receives the computed frame of the object in its container.
layoutDirection: The layout direction.

See also: ViewCompat.LAYOUT_DIRECTION_LTR, ViewCompat.LAYOUT_DIRECTION_RTL

public static void applyDisplay(int gravity, Rect display, Rect inoutObj, int layoutDirection)

Apply additional gravity behavior based on the overall "display" that an object exists in. This can be used after to place the object within a visible display. By default this moves or clips the object to be visible in the display; the gravity flags and can be used to change this behavior.

Parameters:

gravity: Gravity constants to modify the placement within the display.
display: The rectangle of the display in which the object is being placed.
inoutObj: Supplies the current object position; returns with it modified if needed to fit in the display.
layoutDirection: The layout direction.

See also: ViewCompat.LAYOUT_DIRECTION_LTR, ViewCompat.LAYOUT_DIRECTION_RTL

public static int getAbsoluteGravity(int gravity, int layoutDirection)

Convert script specific gravity to absolute horizontal value.

if horizontal direction is LTR, then START will set LEFT and END will set RIGHT. if horizontal direction is RTL, then START will set RIGHT and END will set LEFT.

Parameters:

gravity: The gravity to convert to absolute (horizontal) values.
layoutDirection: The layout direction.

Returns:

gravity converted to absolute (horizontal) values.

Source

/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


package androidx.core.view;

import static android.os.Build.VERSION.SDK_INT;

import android.graphics.Rect;
import android.view.Gravity;

import androidx.annotation.DoNotInline;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;

/**
 * Compatibility shim for accessing newer functionality from {@link Gravity}.
 */
public final class GravityCompat {
    /** Raw bit controlling whether the layout direction is relative or not (START/END instead of
     * absolute LEFT/RIGHT).
     */
    public static final int RELATIVE_LAYOUT_DIRECTION = 0x00800000;

    /** Push object to x-axis position at the start of its container, not changing its size. */
    public static final int START = RELATIVE_LAYOUT_DIRECTION | Gravity.LEFT;

    /** Push object to x-axis position at the end of its container, not changing its size. */
    public static final int END = RELATIVE_LAYOUT_DIRECTION | Gravity.RIGHT;

    /**
     * Binary mask for the horizontal gravity and script specific direction bit.
     */
    public static final int RELATIVE_HORIZONTAL_GRAVITY_MASK = START | END;

    /**
     * Apply a gravity constant to an object and take care if layout direction is RTL or not.
     *
     * @param gravity The desired placement of the object, as defined by the
     *                constants in this class.
     * @param w The horizontal size of the object.
     * @param h The vertical size of the object.
     * @param container The frame of the containing space, in which the object
     *                  will be placed.  Should be large enough to contain the
     *                  width and height of the object.
     * @param outRect Receives the computed frame of the object in its
     *                container.
     * @param layoutDirection The layout direction.
     *
     * @see ViewCompat#LAYOUT_DIRECTION_LTR
     * @see ViewCompat#LAYOUT_DIRECTION_RTL
     */
    public static void apply(int gravity, int w, int h, @NonNull Rect container,
            @NonNull Rect outRect, int layoutDirection) {
        if (SDK_INT >= 17) {
            Api17Impl.apply(gravity, w, h, container, outRect, layoutDirection);
        } else {
            Gravity.apply(gravity, w, h, container, outRect);
        }
    }

    /**
     * Apply a gravity constant to an object.
     *
     * @param gravity The desired placement of the object, as defined by the
     *                constants in this class.
     * @param w The horizontal size of the object.
     * @param h The vertical size of the object.
     * @param container The frame of the containing space, in which the object
     *                  will be placed.  Should be large enough to contain the
     *                  width and height of the object.
     * @param xAdj Offset to apply to the X axis.  If gravity is LEFT this
     *             pushes it to the right; if gravity is RIGHT it pushes it to
     *             the left; if gravity is CENTER_HORIZONTAL it pushes it to the
     *             right or left; otherwise it is ignored.
     * @param yAdj Offset to apply to the Y axis.  If gravity is TOP this pushes
     *             it down; if gravity is BOTTOM it pushes it up; if gravity is
     *             CENTER_VERTICAL it pushes it down or up; otherwise it is
     *             ignored.
     * @param outRect Receives the computed frame of the object in its
     *                container.
     * @param layoutDirection The layout direction.
     *
     * @see ViewCompat#LAYOUT_DIRECTION_LTR
     * @see ViewCompat#LAYOUT_DIRECTION_RTL
     */
    public static void apply(int gravity, int w, int h, @NonNull Rect container,
            int xAdj, int yAdj, @NonNull Rect outRect, int layoutDirection) {
        if (SDK_INT >= 17) {
            Api17Impl.apply(gravity, w, h, container, xAdj, yAdj, outRect, layoutDirection);
        } else {
            Gravity.apply(gravity, w, h, container, xAdj, yAdj, outRect);
        }
    }

    /**
     * Apply additional gravity behavior based on the overall "display" that an
     * object exists in.  This can be used after
     * {@link Gravity#apply(int, int, int, Rect, int, int, Rect)} to place the object
     * within a visible display.  By default this moves or clips the object
     * to be visible in the display; the gravity flags
     * {@link Gravity#DISPLAY_CLIP_HORIZONTAL} and
     * {@link Gravity#DISPLAY_CLIP_VERTICAL} can be used to change this behavior.
     *
     * @param gravity Gravity constants to modify the placement within the
     * display.
     * @param display The rectangle of the display in which the object is
     * being placed.
     * @param inoutObj Supplies the current object position; returns with it
     * modified if needed to fit in the display.
     * @param layoutDirection The layout direction.
     *
     * @see ViewCompat#LAYOUT_DIRECTION_LTR
     * @see ViewCompat#LAYOUT_DIRECTION_RTL
     */
    public static void applyDisplay(int gravity, @NonNull Rect display, @NonNull Rect inoutObj,
            int layoutDirection) {
        if (SDK_INT >= 17) {
            Api17Impl.applyDisplay(gravity, display, inoutObj, layoutDirection);
        } else {
            Gravity.applyDisplay(gravity, display, inoutObj);
        }
    }

    /**
     * <p>Convert script specific gravity to absolute horizontal value.</p>
     *
     * if horizontal direction is LTR, then START will set LEFT and END will set RIGHT.
     * if horizontal direction is RTL, then START will set RIGHT and END will set LEFT.
     *
     *
     * @param gravity The gravity to convert to absolute (horizontal) values.
     * @param layoutDirection The layout direction.
     * @return gravity converted to absolute (horizontal) values.
     */
    public static int getAbsoluteGravity(int gravity, int layoutDirection) {
        if (SDK_INT >= 17) {
            return Gravity.getAbsoluteGravity(gravity, layoutDirection);
        } else {
            // Just strip off the relative bit to get LEFT/RIGHT.
            return gravity & ~RELATIVE_LAYOUT_DIRECTION;
        }
    }

    private GravityCompat() {
    }

    @RequiresApi(17)
    static class Api17Impl {
        private Api17Impl() {
            // This class is not instantiable.
        }

        @DoNotInline
        static void apply(int gravity, int w, int h, Rect container, Rect outRect,
                int layoutDirection) {
            Gravity.apply(gravity, w, h, container, outRect, layoutDirection);
        }

        @DoNotInline
        static void apply(int gravity, int w, int h, Rect container, int xAdj, int yAdj,
                Rect outRect, int layoutDirection) {
            Gravity.apply(gravity, w, h, container, xAdj, yAdj, outRect, layoutDirection);
        }

        @DoNotInline
        static void applyDisplay(int gravity, Rect display, Rect inoutObj, int layoutDirection) {
            Gravity.applyDisplay(gravity, display, inoutObj, layoutDirection);
        }
    }
}