Android RecyclerView网格布局

一个简单的网格布局activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/message_notice_list_item"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.constraint.ConstraintLayout>

message_main_notice_list.xml


<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="wrap_content"    android:layout_height="150dp"    android:gravity="center"    android:background="@color/colorAccent"    android:orientation="vertical"    android:layout_marginTop="5dp"    >

<ImageView        android:id="@+id/iv_image"        android:layout_width="100dp"        android:layout_height="100dp"        android:background="@mipmap/logo"        android:gravity="center"></ImageView>

<LinearLayout        android:layout_width="60dp"        android:layout_height="match_parent"        android:orientation="vertical"        android:paddingLeft="5dp">

<TextView            android:id="@+id/tv_title"            android:layout_width="match_parent"            android:layout_height="30dp"            android:gravity="center"            android:text="BIBIA"></TextView>

</LinearLayout>

</LinearLayout>
 

适配器MyRecyclerViewAdapter.java:

package com.example.administrator.recyclerviewtest;

import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder>{
    private List<ItemBean> mList;

    static class ViewHolder extends RecyclerView.ViewHolder{
        View myView;
        ImageView imageView;
        TextView title;
        public ViewHolder(View itemView) {
            super(itemView);
            myView = itemView;
            imageView = (ImageView) itemView.findViewById(R.id.iv_image);
            title = (TextView) itemView.findViewById(R.id.tv_title);
        }
    }

    public MyRecyclerViewAdapter(List<ItemBean> list){
        this.mList = list;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_main_notice_list,null);
        final ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    //将数据绑定到控件上
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ItemBean bean = mList.get(position);
        holder.imageView.setBackgroundResource(bean.itemImage);
        holder.title.setText(bean.itemTitle);
    }

    @Override
    public int getItemCount() {
        return mList.size();
    }

    //下面两个方法提供给页面刷新和加载时调用
    public void add(List<ItemBean> addMessageList) {
        //增加数据
        int position = mList.size();
        mList.addAll(position, addMessageList);
        notifyItemInserted(position);
    }

    public void refresh(List<ItemBean> newList) {
        //刷新数据
        mList.removeAll(mList);
        mList.addAll(newList);
        notifyDataSetChanged();
    }
}

主方法:

package com.example.administrator.recyclerviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private RecyclerView recyclerView;

    private List<ItemBean> list;

    private MyRecyclerViewAdapter myAdapte1r;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        list = new ArrayList<ItemBean>();
        for ( int i=0; i< 19;i++){
            list.add(new ItemBean(
                    R.mipmap.logo,
                    "Hello",
                    new Date().toString()+""
            ));
        }
        myAdapte1r = new MyRecyclerViewAdapter(list);

        recyclerView = (RecyclerView) findViewById(R.id.message_notice_list_item);

        //纵向线性布局
        //LinearLayoutManager layoutManager = new LinearLayoutManager(this);

        //纵向线性布局
        GridLayoutManager layoutManager = new GridLayoutManager(this,2);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(myAdapte1r);
    }
}

效果:

原文地址:https://www.cnblogs.com/sunxun/p/9499219.html

时间: 2024-08-01 19:29:53

Android RecyclerView网格布局的相关文章

RecyclerView 网格布局

上面我们介绍的就是?RecyclerView 线性布局的使用,效果还是不错的,一般可以用于浏览个人信息列表操作.接着,我们来看第二种布局形式:网格布局. ? ? 网格布局也是非常常用的,一般用于图片相册的浏览,接下来的工作就是复制粘贴一下原先的代码就可以了,因为适配器里面的代码几乎一个样,我们可以考虑把它封装起来用,不过现在还是怎么方便怎么来. ? ? 对于线性布局来说,网格布局是需要做一定量的修改的,也就是布局文件的修改,我们把旁边的 “我是一只...” 文本给去掉,保留了图片和动物名称,所以

android之网格布局GridLayout

TableLayout(网格布局) 需要注意的: 网格布局需要最低版本支持:API 14 也就是最低andriod4.0 :layout/activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="ma

android之网格布局和线性布局实现注册页面

(注意:1.再用weight的时候,各个组件要设置宽度为0dp,高度也要设置,2.即使没有设置weight,再用linear布局时,比如view和button都要设置宽度高度.3.如果出现运行错误,可以先检查哪个组件没设置高度) :values/strings.xml <?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name"&g

Android train--GridLayout网格布局

--------------------------------------------------------------------- Android GridLayout 怎么让4个TextView均匀填充布局界面 android:layout_rowWeightandroid:layout_rowWeight应该可以达到你想要的效果,不过他们只有在新版本api里才被支持.最后我的解决办法是使用tablelayout,它继承自LinearLayout,可以直接使用layout_weight

android GridView网格布局,高度问题

项目中,遇到这样问题, 网格布局宽度自适应,但是高度设不了,文字和图片下面有一大片空白,将高度写死为306dp也不可以, 多方查找,得到答案,需要在适配器中 设置layoutparams设置高度, 代码如下 public class ServiceGridBaseAdapter extends BaseAdapter{ private Context mContext; private List<StaffEntity> mList; private StaffEntity entity; p

Android RecyclerView详解及实现瀑布流式布局

RecyclerView一个可以代替ListView和GridView的控件,那么RecyclerView到底比他们好在哪里? RecyclerView架构提供了一种插拔式的体验,所以实现了代码的高度解耦,使用起来也异常的灵活. 我们可以通过设置它的LayoutManager控制其显示的方式,通过ItemDecoration控制Item间的间隔,通过ItemAnimator控制Item的增删动画 RecyclerView.LayoutManager提供了三个实现类其中LinearLayoutMa

android RecyclerView布局真的只是那么简单!

如今android N都已经出来了,作为一个android开发者如果还不知道如何使用android5.X的 RecyclerView未免有点说不过去了. RecyclerView比ListView更灵活,更强大.因此也会引入一些复杂性,而这些复杂性,恰恰是在新手前进道路上的很大阻碍,而笔者此文也便是希望可以给予读者一些帮助. RecyclerView是什么? 笔者个人看法,RecyclerView只是一个对ListView的升级版,这个升级的主要目的是为了让这个view的效率更高,并且使用更加方

android的布局-----GridLayout(网格布局)

学习导图 (一)简介 网格布局由GridLayout所代表,在android4.0之后新增加的布局管理器,因此需要android4.0之后的版本中使用,如果在更早的平台使用该布局管理器,则需要导入相应的支持库<android.support.v7.widget.GridLayout> (二)案列----计算器 <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android

Android组件式开发(2)——实现网格布局的RadioButton矩阵

** 前言 ** 在Android中,我们一般通过RadioGroup来管理一组RadioButton 来达到 单选按钮的互斥效果.但是,有些需求中,需要完成N行N列这样的RadioButton组成的矩阵,但是我们的RadioGroup是一个耿直的LinearLayout,无法完成网格布局╮(╯▽╰)╭.所以,下面我就像大家来介绍一种实现网格布局的RadioButton的思路. 无图无真相, 先上一下效果图~ ** 思路 ** 提到网格布局,最简单的就是使用系统的GridView来实现,我们需要