• 热门专题

Androidv7兼容包RecyclerView的使用(三)布局管理器的使用

作者:  发布日期:2015-03-12 20:05:08
Tag标签:布局  
  •  

    为了演示布局管理器的使用,找了很多个例子,都没有找到感觉合适的例子,后来google了一把,发现了一个比较适合说明问题的例子。所以就拿该例子来解释吧。

    在演示布局管理器前,我们先把UI部分搭建完成。由于使用到了V7兼容包的另一个包CardView,所以在这之前我们先把该项目导入eclipse,并设置为library,该项目目录在sdkextrasandroidsupport 7cardview
    然后我们新建我们的项目将该库引入,之后将RecyclerView.jar加入到libs目录下,这样基本算配置完成了。开始编写代码。
    item使用CardView,代码如下

    <?xml version='1.0' encoding='utf-8'?>
    <android.support.v7.widget.CardView xmlns:android='http://schemas.android.com/apk/res/android'
        xmlns:card_view='http://schemas.android.com/apk/res-auto'
        android:layout_width='match_parent'
        android:layout_height='match_parent'
        android:layout_margin='5dp'
        android:orientation='horizontal'
        card_view:cardCornerRadius='5dp'
        card_view:cardUseCompatPadding='true' >
    
        <RelativeLayout
            android:layout_width='match_parent'
            android:layout_height='match_parent' >
    
            <TextView
                android:id='@+id/info_text'
                android:layout_width='match_parent'
                android:layout_height='wrap_content'
                android:layout_centerInParent='true'
                android:gravity='center'
                android:textColor='@android:color/black'
                android:textSize='24sp' />
        </RelativeLayout>
    
    </android.support.v7.widget.CardView>

    创建适配器,代码前两篇文章已经讲解过了,这里不再讲解

    package cn.edu.zafu.layoutmanager;
    
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class CardViewAdapter extends
            RecyclerView.Adapter<CardViewAdapter.ViewHolder> {
        //数据集
        public String[] data;
    
        public CardViewAdapter(String[] data) {
            this.data = data;
        }
    
        @Override
        public CardViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                int viewType) {
            //绑定布局
            View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                    R.layout.item, null);
            //创建ViewHolder
            ViewHolder viewHolder = new ViewHolder(itemLayoutView);
            return viewHolder;
        }
    
        @Override
        public void onBindViewHolder(ViewHolder viewHolder, int position) {
            //绑定数据
            viewHolder.info.setText(data[position].toString());
    
        }
    
        @Override
        public int getItemCount() {
            return data.length;
        }
    
        public static class ViewHolder extends RecyclerView.ViewHolder {
            public TextView info;
    
            public ViewHolder(View itemLayoutView) {
                super(itemLayoutView);
                info = (TextView) itemLayoutView.findViewById(R.id.info_text);
    
            }
        }
    
    }
    

    在主布局文件中生声明RecyclerView

    <?xml version='1.0' encoding='utf-8'?>
    <LinearLayout xmlns:android='http://schemas.android.com/apk/res/android'
        android:layout_width='match_parent'
        android:layout_height='match_parent'
        android:background='#c9c9c9'
        android:orientation='vertical' >
    
        <android.support.v7.widget.RecyclerView
            android:id='@+id/recyclerview'
            android:layout_width='match_parent'
            android:layout_height='match_parent'
            android:scrollbars='vertical' />
    
    </LinearLayout>

    在activity中使用,这里先简单创建一个线性布局管理器。

    package cn.edu.zafu.layoutmanager;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.support.v7.widget.GridLayoutManager;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.RecyclerView.LayoutManager;
    import android.support.v7.widget.StaggeredGridLayoutManager;
    
    public class MainActivity extends Activity {
        private RecyclerView mRecyclerView;
        private RecyclerView.Adapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            String[] data = { 'StaggeredGridLayoutManager', 'LayoutManager', 'GridLayoutManager', 'Adapter', 'ViewHolder',
                    'LinearLayoutManager', 'CardView', 'ListView', 'TextView',
                    'Vertical', 'Horizontal', 'RecyclerView' };
    
            mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    
    
            //如果布局大小一致有利于优化
            mRecyclerView.setHasFixedSize(true);
    
            //使用线性布局管理器
            LayoutManager layout = new LinearLayoutManager(this);
            mRecyclerView.setLayoutManager(layout);
    
    
            //初始化适配器并绑定适配器
            mAdapter = new CardViewAdapter(data);
            mRecyclerView.setAdapter(mAdapter);
        }
    }
    

    现在看一下运行效果。
    这里写图片描述

    效果是不是还可以,基本上和ListView的效果一致。
    好了,那么现在我们来修改一下代码,将关注点移动到布局管理器上。
    先看LinearLayoutManager,该类有两个构造函数。

    LinearLayoutManager(context)
    LinearLayoutManager(context, orientation, reverseLayout)

    第一个参数是Context,第二个参数是布局方向,其值可以取

    LinearLayoutManager.HORIZONTAL 水平
    LinearLayoutManager.VERTICAL 垂直

    第三个参数是是否逆向布局如果设置为true,则反向开始布局,现在我们将布局设置为水平,并逆向布局,使用下面的代码

    LayoutManager layout = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,true);

    现在的效果是这样的。
    水平布局

    可以看出,所有的数据是从右向左布局的,这就是逆向布局。

    此外,布局管理器里还有一些其他方法,请参见api文档。

    用过了线性布局,我们再换一个布局,

    LayoutManager layout=new GridLayoutManager(this,2);

    网格布局,设置2列,默认垂直布局。效果图如下。
    网格布局

    将它改成3列

    LayoutManager layout=new GridLayoutManager(this,3);

    这里写图片描述

    跟线性布局一样,网格布局还有一个构造函数,其意义同线性布局,这里,我们不适用逆向布局,设置2列,垂直,效果跟之前的图一样。

    LayoutManager layout=new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);

    还有一个布局管理器就是流式布局管理器,该类只有一个构造函数,一个是列数或者行数,另一个是布局方向,依然看代码

    LayoutManager layout=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
    

    效果呢,就是现在很流行的流式布局,在各大购物网站都可以看到这种效果。
    流式布局

    至此,v7兼容包内置的几个布局管理器都使用了一番,那么有什么感受呢,是的,两个字,就是灵活,可以看出,从开篇到结尾,我们就只是修改了一行代码,就达到了不同的效果,这就是布局管理器的灵活之处,我们也可以去继承LayoutManager重写我们自己的布局管理器,本人水平有限,无法达到这一层次,有兴趣的可以去尝试一下。
    当然布局管理的用法不仅仅是上面说到的这一点点,还有很多的方法等待我们去挖掘。

    源码下载
    http://www.it165.net/uploadfile/files/2015/0312/RecyclerView.rar

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规