diff --git a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
index cce2dd9..9e0cac8 100644
--- a/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
+++ b/car-ui-lib/car-ui-lib/src/main/java/com/android/car/ui/recyclerview/CarUiRecyclerView.java
@@ -82,7 +82,13 @@
     private ScrollBar mScrollBar;
 
     @Nullable
-    private GridOffsetItemDecoration mOffsetItemDecoration;
+    private GridOffsetItemDecoration mTopOffsetItemDecorationGrid;
+    @Nullable
+    private GridOffsetItemDecoration mBottomOffsetItemDecorationGrid;
+    @Nullable
+    private RecyclerView.ItemDecoration mTopOffsetItemDecorationLinear;
+    @Nullable
+    private RecyclerView.ItemDecoration mBottomOffsetItemDecorationLinear;
     @NonNull
     private GridDividerItemDecoration mDividerItemDecorationGrid;
     @NonNull
@@ -97,6 +103,10 @@
     @Nullable
     private LinearLayout mContainer;
 
+    private boolean mEnableDividers;
+    private int mTopOffset;
+    private int mBottomOffset;
+
 
     /**
      * The possible values for setScrollBarPosition. The default value is actually {@link
@@ -182,7 +192,7 @@
         @CarUiRecyclerViewLayout int carUiRecyclerViewLayout =
                 a.getInt(R.styleable.CarUiRecyclerView_layoutStyle, CarUiRecyclerViewLayout.LINEAR);
         mNumOfColumns = a.getInt(R.styleable.CarUiRecyclerView_numOfColumns, /* defValue= */ 2);
-        boolean enableDivider =
+        mEnableDividers =
                 a.getBoolean(R.styleable.CarUiRecyclerView_enableDivider, /* defValue= */ false);
 
         mDividerItemDecorationLinear = new LinearDividerItemDecoration(
@@ -194,41 +204,23 @@
                         context.getDrawable(R.drawable.car_ui_divider),
                         mNumOfColumns);
 
-        int topOffset = a.getInteger(R.styleable.CarUiRecyclerView_topOffset, /* defValue= */0);
-        int bottomOffset = a.getInteger(
+        mTopOffset = a.getInteger(R.styleable.CarUiRecyclerView_topOffset, /* defValue= */0);
+        mBottomOffset = a.getInteger(
                 R.styleable.CarUiRecyclerView_bottomOffset, /* defValue= */0);
+        mTopOffsetItemDecorationLinear =
+                new LinearOffsetItemDecoration(mTopOffset, OffsetPosition.START);
+        mBottomOffsetItemDecorationLinear =
+                new LinearOffsetItemDecoration(mBottomOffset, OffsetPosition.END);
+        mTopOffsetItemDecorationGrid =
+                new GridOffsetItemDecoration(mTopOffset, mNumOfColumns,
+                        OffsetPosition.START);
+        mBottomOffsetItemDecorationGrid =
+                new GridOffsetItemDecoration(mBottomOffset, mNumOfColumns,
+                        OffsetPosition.END);
         if (carUiRecyclerViewLayout == CarUiRecyclerViewLayout.LINEAR) {
-
-            if (enableDivider) {
-                addItemDecoration(mDividerItemDecorationLinear);
-            }
-            RecyclerView.ItemDecoration topOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(topOffset, OffsetPosition.START);
-
-            RecyclerView.ItemDecoration bottomOffsetItemDecoration =
-                    new LinearOffsetItemDecoration(bottomOffset, OffsetPosition.END);
-
-            addItemDecoration(topOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
             setLayoutManager(new LinearLayoutManager(getContext()));
         } else {
-
-            if (enableDivider) {
-                addItemDecoration(mDividerItemDecorationGrid);
-            }
-
-            mOffsetItemDecoration =
-                    new GridOffsetItemDecoration(topOffset, mNumOfColumns,
-                            OffsetPosition.START);
-
-            GridOffsetItemDecoration bottomOffsetItemDecoration =
-                    new GridOffsetItemDecoration(bottomOffset, mNumOfColumns,
-                            OffsetPosition.END);
-
-            addItemDecoration(mOffsetItemDecoration);
-            addItemDecoration(bottomOffsetItemDecoration);
             setLayoutManager(new GridLayoutManager(getContext(), mNumOfColumns));
-            setNumOfColumns(mNumOfColumns);
         }
 
         a.recycle();
@@ -255,6 +247,34 @@
         mScrollBarClass = context.getResources().getString(R.string.car_ui_scrollbar_component);
     }
 
+    @Override
+    public void setLayoutManager(@Nullable LayoutManager layout) {
+        addItemDecorations(layout);
+        super.setLayoutManager(layout);
+    }
+
+    private void addItemDecorations(LayoutManager layout) {
+        if (layout instanceof GridLayoutManager) {
+            if (mEnableDividers) {
+                removeItemDecoration(mDividerItemDecorationGrid);
+                addItemDecoration(mDividerItemDecorationGrid);
+            }
+            removeItemDecoration(mTopOffsetItemDecorationGrid);
+            addItemDecoration(mTopOffsetItemDecorationGrid);
+            removeItemDecoration(mBottomOffsetItemDecorationGrid);
+            addItemDecoration(mBottomOffsetItemDecorationGrid);
+            setNumOfColumns(((GridLayoutManager) layout).getSpanCount());
+        } else {
+            if (mEnableDividers) {
+                addItemDecoration(mDividerItemDecorationLinear);
+            }
+            removeItemDecoration(mTopOffsetItemDecorationLinear);
+            addItemDecoration(mTopOffsetItemDecorationLinear);
+            removeItemDecoration(mBottomOffsetItemDecorationLinear);
+            addItemDecoration(mBottomOffsetItemDecorationLinear);
+        }
+    }
+
     /**
      * If this view's content description isn't set to opt out of scrolling via the rotary
      * controller, initialize it accordingly.
@@ -324,8 +344,8 @@
      */
     public void setNumOfColumns(int numberOfColumns) {
         mNumOfColumns = numberOfColumns;
-        if (mOffsetItemDecoration != null) {
-            mOffsetItemDecoration.setNumOfColumns(mNumOfColumns);
+        if (mTopOffsetItemDecorationGrid != null) {
+            mTopOffsetItemDecorationGrid.setNumOfColumns(mNumOfColumns);
         }
         if (mDividerItemDecorationGrid != null) {
             mDividerItemDecorationGrid.setNumOfColumns(mNumOfColumns);
diff --git a/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
index 5d51d4c..a691bf0 100644
--- a/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
+++ b/car-ui-lib/paintbooth/src/main/java/com/android/car/ui/paintbooth/caruirecyclerview/GridCarUiRecyclerViewActivity.java
@@ -20,6 +20,7 @@
 import android.os.Bundle;
 
 import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.GridLayoutManager;
 
 import com.android.car.ui.baselayout.Insets;
 import com.android.car.ui.baselayout.InsetsChangedListener;
@@ -47,6 +48,7 @@
         toolbar.setState(Toolbar.State.SUBPAGE);
 
         CarUiRecyclerView recyclerView = findViewById(R.id.list);
+        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
 
         RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateSampleData());
         recyclerView.setAdapter(adapter);
diff --git a/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml b/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
index 2b0d1a4..622ffa3 100644
--- a/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
+++ b/car-ui-lib/paintbooth/src/main/res/layout/grid_car_ui_recycler_view_activity.xml
@@ -18,7 +18,6 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/list"
-    app:layoutStyle="grid"
     app:numOfColumns="4"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
