public class

TopOffsetDecoration

extends RecyclerView.ItemDecoration

 java.lang.Object

androidx.recyclerview.widget.RecyclerView.ItemDecoration

↳androidx.car.widget.itemdecorators.TopOffsetDecoration

Gradle dependencies

compile group: 'androidx.car', name: 'car', version: '1.0.0-alpha7'

  • groupId: androidx.car
  • artifactId: car
  • version: 1.0.0-alpha7

Artifact androidx.car:car:1.0.0-alpha7 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.car:car com.android.support:car

Overview

A that will add a top offset to the first item in the RecyclerView it is added to.

Summary

Constructors
publicTopOffsetDecoration(int topOffset)

Methods
public voidgetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)

Retrieve any offsets for the given item.

public intgetTopOffset()

Returns the set bottom offset.

public voidsetTopOffset(int topOffset)

Sets the value to use for the top offset.

from RecyclerView.ItemDecorationgetItemOffsets, onDraw, onDraw, onDrawOver, onDrawOver
from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public TopOffsetDecoration(int topOffset)

Methods

public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)

Retrieve any offsets for the given item. Each field of outRect specifies the number of pixels that the item view should be inset by, similar to padding or margin. The default implementation sets the bounds of outRect to 0 and returns.

If this ItemDecoration does not affect the positioning of item views, it should set all four fields of outRect (left, top, right, bottom) to zero before returning.

If you need to access Adapter for additional data, you can call RecyclerView.getChildAdapterPosition(View) to get the adapter position of the View.

Parameters:

outRect: Rect to receive the output.
view: The child view to decorate
parent: RecyclerView this ItemDecoration is decorating
state: The current state of RecyclerView.

public void setTopOffset(int topOffset)

Sets the value to use for the top offset.

public int getTopOffset()

Returns the set bottom offset. If none has been set, then 0 will be returned.

Source

/*
 * Copyright (C) 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.car.widget.itemdecorators;

import static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP_PREFIX;

import android.graphics.Rect;
import android.view.View;

import androidx.annotation.RestrictTo;
import androidx.car.util.GridLayoutManagerUtils;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

/**
 * A {@link RecyclerView.ItemDecoration} that will add a top offset to the first item in the
 * RecyclerView it is added to.
 *
 * @hide
 */
@RestrictTo(LIBRARY_GROUP_PREFIX)
public class TopOffsetDecoration extends RecyclerView.ItemDecoration {
    private int mTopOffset;

    public TopOffsetDecoration(int topOffset) {
        mTopOffset = topOffset;
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
            RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
        int position = parent.getChildAdapterPosition(view);
        if (parent.getLayoutManager() instanceof GridLayoutManager
                && position < GridLayoutManagerUtils.getFirstRowItemCount(parent)) {
            // For GridLayoutManager, top offset should be set for all items in the first row.
            // Otherwise the top items will be visually uneven.
            outRect.top = mTopOffset;
        } else if (position == 0) {
            // Only set the offset for the first item.
            outRect.top = mTopOffset;
        } else {
            outRect.top = 0;
        }
    }

    /** Sets the value to use for the top offset. */
    public void setTopOffset(int topOffset) {
        mTopOffset = topOffset;
    }

    /** Returns the set bottom offset. If none has been set, then 0 will be returned. */
    public int getTopOffset() {
        return mTopOffset;
    }
}