Android学习——RecyclerView

实现横向滚动和瀑布流布局

横向滚动:

修改布局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     }
原文地址:https://www.cnblogs.com/znjy/p/14906005.html