1e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar/* 2e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Copyright (C) 2014 The Android Open Source Project 3e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * 4e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * you may not use this file except in compliance with the License. 6e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * You may obtain a copy of the License at 7e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * 8e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * 10e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * See the License for the specific language governing permissions and 14e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar * limitations under the License. 15e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar */ 16e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 17e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarpackage com.example.android.supportv7.widget; 18e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 19e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v4.view.ViewCompat; 207febb12feeade9937fc0bd1a8e5967251c4aad24Aurimas Liutikasimport android.support.v7.widget.DividerItemDecoration; 21e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v7.widget.LinearLayoutManager; 22849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikasimport android.support.v7.widget.LinearSnapHelper; 23e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport android.support.v7.widget.RecyclerView; 247febb12feeade9937fc0bd1a8e5967251c4aad24Aurimas Liutikas 25e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyarimport com.example.android.supportv7.R; 265b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.widget.util.ConfigToggle; 27e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 28e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar/** 291f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar * A sample activity that uses {@link LinearLayoutManager}. 30e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar */ 311f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyarpublic class LinearLayoutManagerActivity extends BaseLayoutManagerActivity<LinearLayoutManager> { 32e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar private DividerItemDecoration mDividerItemDecoration; 33849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas private LinearSnapHelper mLinearSnapHelper; 34849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas private boolean mSnapHelperAttached; 35e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 36e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 371f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar protected LinearLayoutManager createLayoutManager() { 381f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 39e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 40e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 411f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar @Override 421f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar protected void onRecyclerViewInit(RecyclerView recyclerView) { 431f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar mDividerItemDecoration = new DividerItemDecoration(this, mLayoutManager.getOrientation()); 441f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar recyclerView.addItemDecoration(mDividerItemDecoration); 45849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas mLinearSnapHelper = new LinearSnapHelper(); 46e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 47e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 481f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar @Override 498faffcd819c6272f9e6537d563c8492854787968Chris Craik protected ConfigToggle[] createConfigToggles() { 501f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar return new ConfigToggle[]{ 511f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar new ConfigToggle(this, R.string.checkbox_orientation) { 52e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 53e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public boolean isChecked() { 541f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar return mLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL; 55e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 56e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 57e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 58e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public void onChange(boolean newValue) { 591f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar mLayoutManager.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL 60e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar : LinearLayoutManager.VERTICAL); 611244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar if (mDividerItemDecoration != null) { 621f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar mDividerItemDecoration.setOrientation(mLayoutManager.getOrientation()); 631244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar } 641244264d8066e64e90fa0b8088ffa50ae4624ca4Yigit Boyar 65e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 66e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar }, 671f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar new ConfigToggle(this, R.string.checkbox_reverse) { 68e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 69e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public boolean isChecked() { 701f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar return mLayoutManager.getReverseLayout(); 71e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 72e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 73e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 74e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public void onChange(boolean newValue) { 751f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar mLayoutManager.setReverseLayout(newValue); 76e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 77e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar }, 781f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar new ConfigToggle(this, R.string.checkbox_layout_dir) { 79e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 80e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public boolean isChecked() { 81e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar return ViewCompat.getLayoutDirection(mRecyclerView) == 82e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar ViewCompat.LAYOUT_DIRECTION_RTL; 83e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 84e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 85e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 86e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public void onChange(boolean newValue) { 87e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar ViewCompat.setLayoutDirection(mRecyclerView, newValue ? 88e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar ViewCompat.LAYOUT_DIRECTION_RTL : ViewCompat.LAYOUT_DIRECTION_LTR); 89e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 90e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar }, 911f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar new ConfigToggle(this, R.string.checkbox_stack_from_end) { 92e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 93e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public boolean isChecked() { 941f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar return mLayoutManager.getStackFromEnd(); 95e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 96e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar 97e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar @Override 98e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar public void onChange(boolean newValue) { 991f30fc8732560027f364ad42bbc3f7db8aace8adYigit Boyar mLayoutManager.setStackFromEnd(newValue); 100e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 101849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas }, 102849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas new ConfigToggle(this, R.string.checkbox_snap) { 103849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas @Override 104849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas public boolean isChecked() { 105849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas return mSnapHelperAttached; 106849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas } 107849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas 108849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas @Override 109849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas public void onChange(boolean newValue) { 110849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas mLinearSnapHelper.attachToRecyclerView(newValue ? mRecyclerView : null); 111849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas mSnapHelperAttached = newValue; 112849542dfdc5e83411c8b959251eb6f2a1556fc9dAurimas Liutikas } 113e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 114e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar }; 115e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar } 116e9f9a04c426e7423db0cd58ec8d2dc3ff2238a30Yigit Boyar} 117