实现横向滚动和瀑布流布局
横向滚动:
修改布局fruit_item.xml,将元素改为垂直排列
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="wrap_content" 3 android:layout_height="wrap_content" 4 android:orientation="vertical"> 5 6 <ImageView 7 android:id="@+id/fruit_image" 8 android:layout_width="100dp" 9 android:layout_height="100dp" 10 android:layout_gravity="center_horizontal" /> 11 12 <TextView 13 android:id="@+id/fruit_name" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:layout_gravity="center_vertical" 17 android:layout_marginTop="10dp" /> 18 </LinearLayout>
修改MainActivity,调用LinearLayoutManager的setOrientation()方法来设置布局的排列方向,默认是纵向,传入LinearLayoutManager.HORIZONTAL表示让布局横向排列
1 public class MainActivity extends AppCompatActivity { 2 3 private List<Fruit> fruitList = new ArrayList<>(); 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 initFruits(); 10 RecyclerView recyclerView = findViewById(R.id.relative_view); 11 LinearLayoutManager layoutManager = new LinearLayoutManager(this); 12 layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 13 recyclerView.setLayoutManager(layoutManager); 14 FruitAdapter adapter = new FruitAdapter(fruitList); 15 recyclerView.setAdapter(adapter); 16 } 17 private void initFruits(){ 18 for (int i = 0;i<2;i++){ 19 Fruit apple = new Fruit("Apple",R.drawable.apple); 20 fruitList.add(apple); 21 Fruit banner = new Fruit("Banner",R.drawable.banner); 22 fruitList.add(banner); 23 Fruit orange = new Fruit("Orange",R.drawable.orange); 24 fruitList.add(orange); 25 Fruit watermelon = new Fruit("Watermelon",R.drawable.watermelon); 26 fruitList.add(watermelon); 27 Fruit pear = new Fruit("Pear",R.drawable.pear); 28 fruitList.add(pear); 29 Fruit grape = new Fruit("Grape",R.drawable.grape); 30 fruitList.add(grape); 31 Fruit pineapple = new Fruit("Pineapple",R.drawable.pineapple); 32 fruitList.add(pineapple); 33 Fruit strawberry = new Fruit("Strawberry",R.drawable.strawberry); 34 fruitList.add(strawberry); 35 Fruit cherry = new Fruit("Cherry",R.drawable.cherry); 36 fruitList.add(cherry); 37 Fruit mango = new Fruit("Mango",R.drawable.mango); 38 fruitList.add(mango); 39 40 } 41 } 42 }
瀑布流布局
修改fruit_item布局,使用layout_margin属性让子项之间互留间距,TextView对其属性改为居左对齐
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="wrap_content" 4 android:orientation="vertical" 5 android:layout_margin="5dp" 6 > 7 8 <ImageView 9 android:id="@+id/fruit_image" 10 android:layout_width="100dp" 11 android:layout_height="100dp" 12 android:layout_gravity="center_horizontal" /> 13 14 <TextView 15 android:id="@+id/fruit_name" 16 android:layout_width="wrap_content" 17 android:layout_height="wrap_content" 18 android:layout_gravity="left" 19 android:layout_marginTop="10dp" /> 20 </LinearLayout>
修改MainActivity
1 public class MainActivity extends AppCompatActivity { 2 3 private List<Fruit> fruitList = new ArrayList<>(); 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 initFruits(); 10 RecyclerView recyclerView = findViewById(R.id.relative_view); 11 //创建StaggeredGridLayoutManager实例。StaggeredGridLayoutManager的构造函数接收两个参数,第一个是布局的列数,第二个是布局的排列方向,StaggeredGridLayoutManager.VERTICAL是让布局纵向排列 12 StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL); 13 //吧创建好的实例设置到RecyclerView中 14 recyclerView.setLayoutManager(layoutManager); 15 FruitAdapter adapter = new FruitAdapter(fruitList); 16 recyclerView.setAdapter(adapter); 17 } 18 private void initFruits(){ 19 for (int i = 0;i<2;i++){ 20 Fruit apple = new Fruit(getRandomLengthName("Apple"),R.drawable.apple); 21 fruitList.add(apple); 22 Fruit banner = new Fruit(getRandomLengthName("Banner"),R.drawable.banner); 23 fruitList.add(banner); 24 Fruit orange = new Fruit(getRandomLengthName("Orange"),R.drawable.orange); 25 fruitList.add(orange); 26 Fruit watermelon = new Fruit(getRandomLengthName("Watermelon"),R.drawable.watermelon); 27 fruitList.add(watermelon); 28 Fruit pear = new Fruit(getRandomLengthName("Pear"),R.drawable.pear); 29 fruitList.add(pear); 30 Fruit grape = new Fruit(getRandomLengthName("Grape"),R.drawable.grape); 31 fruitList.add(grape); 32 Fruit pineapple = new Fruit(getRandomLengthName("Pineapple"),R.drawable.pineapple); 33 fruitList.add(pineapple); 34 Fruit strawberry = new Fruit(getRandomLengthName("Strawberry"),R.drawable.strawberry); 35 fruitList.add(strawberry); 36 Fruit cherry = new Fruit(getRandomLengthName("Cherry"),R.drawable.cherry); 37 fruitList.add(cherry); 38 Fruit mango = new Fruit(getRandomLengthName("Mango"),R.drawable.mango); 39 fruitList.add(mango); 40 41 } 42 }