1 /* 2 * Copyright (C) 2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.example.androidx.widget; 18 19 import android.view.View; 20 21 import androidx.recyclerview.widget.DividerItemDecoration; 22 import androidx.recyclerview.widget.LinearLayoutManager; 23 import androidx.recyclerview.widget.LinearSnapHelper; 24 import androidx.recyclerview.widget.RecyclerView; 25 26 import com.example.androidx.R; 27 import com.example.androidx.widget.util.ConfigToggle; 28 29 /** 30 * A sample activity that uses {@link LinearLayoutManager}. 31 */ 32 public class LinearLayoutManagerActivity extends BaseLayoutManagerActivity<LinearLayoutManager> { 33 private DividerItemDecoration mDividerItemDecoration; 34 private LinearSnapHelper mLinearSnapHelper; 35 private boolean mSnapHelperAttached; 36 37 @Override createLayoutManager()38 protected LinearLayoutManager createLayoutManager() { 39 return new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); 40 } 41 42 @Override onRecyclerViewInit(RecyclerView recyclerView)43 protected void onRecyclerViewInit(RecyclerView recyclerView) { 44 mDividerItemDecoration = new DividerItemDecoration(this, mLayoutManager.getOrientation()); 45 recyclerView.addItemDecoration(mDividerItemDecoration); 46 mLinearSnapHelper = new LinearSnapHelper(); 47 } 48 49 @Override createConfigToggles()50 protected ConfigToggle[] createConfigToggles() { 51 return new ConfigToggle[]{ 52 new ConfigToggle(this, R.string.checkbox_orientation) { 53 @Override 54 public boolean isChecked() { 55 return mLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL; 56 } 57 58 @Override 59 public void onChange(boolean newValue) { 60 mLayoutManager.setOrientation(newValue ? LinearLayoutManager.HORIZONTAL 61 : LinearLayoutManager.VERTICAL); 62 if (mDividerItemDecoration != null) { 63 mDividerItemDecoration.setOrientation(mLayoutManager.getOrientation()); 64 } 65 66 } 67 }, 68 new ConfigToggle(this, R.string.checkbox_reverse) { 69 @Override 70 public boolean isChecked() { 71 return mLayoutManager.getReverseLayout(); 72 } 73 74 @Override 75 public void onChange(boolean newValue) { 76 mLayoutManager.setReverseLayout(newValue); 77 } 78 }, 79 new ConfigToggle(this, R.string.checkbox_layout_dir) { 80 @Override 81 public boolean isChecked() { 82 return mRecyclerView.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; 83 } 84 85 @Override 86 public void onChange(boolean newValue) { 87 mRecyclerView.setLayoutDirection(newValue 88 ? View.LAYOUT_DIRECTION_RTL : View.LAYOUT_DIRECTION_LTR); 89 } 90 }, 91 new ConfigToggle(this, R.string.checkbox_stack_from_end) { 92 @Override 93 public boolean isChecked() { 94 return mLayoutManager.getStackFromEnd(); 95 } 96 97 @Override 98 public void onChange(boolean newValue) { 99 mLayoutManager.setStackFromEnd(newValue); 100 } 101 }, 102 new ConfigToggle(this, R.string.checkbox_snap) { 103 @Override 104 public boolean isChecked() { 105 return mSnapHelperAttached; 106 } 107 108 @Override 109 public void onChange(boolean newValue) { 110 mLinearSnapHelper.attachToRecyclerView(newValue ? mRecyclerView : null); 111 mSnapHelperAttached = newValue; 112 } 113 } 114 }; 115 } 116 } 117