Androic 5.0新特性(二)

    Android5.0新特性

RecyclerView它有独立的LayoutManager,可以灵活的控制RecyclerView中items的布局:LinearLayoutManager(垂直布局、水平布局)、

先得到一个布局管理器:

LinearLayoutManager  layout=new LinearLayoutManager(this);

可以给它设置朝向与滑动的方向

layout.setOrientation(LinearLayoutManager.HORIZONTAL
)

也可以通过一个三元运算去控制朝向,就不用写死

layout.setOrientation(isHORIZONTAL?LinearLayoutManager.HORIZONTAL:LinearLayoutManager.VERTICAL);

然后将布局设置给recyclerView

recyclerview.setLayoutManager(layout);

GridLayoutManager(网格布局)、

GridLayoutManager layout=new GridLayoutManager(this,3);
第二个参数表示网格的列数

StaggeredGridLayoutManager(瀑布流布局);

StaggeredGridLayoutManager layoutt=new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.HORIZONTAL);
第一个参数表示每一行的显示的个数,
第二个参数表示它布局的方法,以及滑动的方法     

动态设置高度

RelativeLayout.LayoutParams Params = ( RelativeLayout.LayoutParams) holder.itemView.getLayoutParams();  Params.height = mHeight.get(position);  holder.itemView.setLayoutParams(Params);

 

以下是RecyclerView中的划线:

由于RecyclerView没有listView默认的item的分割线

所以要自己手动画线:

recyclerview.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));
画线的工具类DividerItemDecoration:可以自己写,也可以去getHub下载

下载路径:

DividerItemDecoration:

      https://gist.github.com/alexfu/0f464fc3742f134ccd1e

第一个参数传上下文,第二个参数代表线的朝向

它默认是一条白线:我们可以自定义分割线

自定义的方法:在drawable目录下写一个shape然后用渐变色<shape xmlns:android="http://schemas.android.com/apk/res/android"     android:shape="rectangle"     >     <size android:height="4dp"/>     <gradient android:startColor="#ff00cc"               android:centerColor="#00ffaa"               android:endColor="#00aaff"/> </shape>

怎样在文件中引用这个自定义的布局:在该项目的清单文件中配置系统提供的一个android:listDivider

<item name="android:listDivider">@drawable/recycler_shape</item>

设置点击菜单切换效果

这句话显示菜单栏为3个点,并在左上角

ActionBar actionbar =  getSupportActionBar();

 

1:先写布局如下:

<menu 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"       tools:context="itheima.com.android50.MainActivity">    <item         android:id="@+id/re_list"        android:orderInCategory="100"         android:title="grid"         app:showAsAction="never"         />     <item         android:id="@+id/re_grid"         android:orderInCategory="20"         android:title="ListActivity"         app:showAsAction="never"         />     <item         android:id="@+id/re_stagger"         android:orderInCategory="10"         android:title="StaggeredActivity"         app:showAsAction="never"         />     <item         android:id="@+id/re_add"         android:orderInCategory="30"         android:title="add"         app:showAsAction="never"         />     <item         android:id="@+id/re_delete"         android:orderInCategory="50"         android:title="delete"         app:showAsAction="never"         /> </menu>
 
App:showAsActio有三个属性
never:不显示在界面上,只让出现在右边的三个点中
always:总是显示在界面上
ifRoom如果有位置它会显示在标题栏上,不然就出现在右边的三个点中

orderIncategory:这个表示在条目中的显示优先级

数值越大,优先级越低,越后显示

在代码中重写:onCreatOptionsMenu(Menumenu)

onOptionsItemselected(MenuItemitem)2个方法

onCreatOptionsMenu(Menumenu)的作用:将写好的菜单栏的布局填充进来

getMenuInflater().inflate(R.menu.main, menu);

onOptionsItemselected(MenuItemitem)的作用:

点击菜单栏中的item去做切换:

id=item.getItemId(); switch (id){     case R.id.re_list:         recyclerview.setLayoutManager(new LinearLayoutManager(this));     break;     case R.id.re_grid:        recyclerview.setLayoutManager(new GridLayoutManager(this,3));     break;     case R.id.re_stagger:         recyclerview.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));     break;     /**      * 添加item      */     case R.id.re_add:         add(1);     break;     /**      * 删除item      */     case R.id.re_delete:         delete(1);     break; } return super.onOptionsItemSelected(item);

 

RecyclerView标准化了ViewHolder,使用Adapter适配器时,面向ViewHolder而不是单纯的View,直接把ViewHolder的实现封装起来,

所以写viewHolder的时候要在适配器里面写:在viewHolder里面可以进行控件的初始化,以及数据的设置,class MyHolder extends RecyclerView.ViewHolder{     TextView tv;     ImageView iv;     public MyHolder(final View itemView) {         super(itemView);         MainActivity.this.itemView= (RelativeLayout) itemView;         tv= (TextView) itemView.findViewById(R.id.tv);         iv= (ImageView)itemView.findViewById(R.id.iv);     }     /**      * 设置数据的方法      * @param position      */     private void setData(int position){         iv.setImageResource(icon[position]);         tv.setText(mText[position]);         //itemView.setTag(R.id.itemView, position);     } }
数据的设置也可以放在onBindViewHolder里面进行设置
设置适配器时继承RecyclerView.ViewHolder

重写getItemCount()和onBindViewHolder(MyHolder holder,intposition)和onCreatViewHolder(ViewGroup parent,intviewType)

第一个方法用于返回数据的长度

第二个方法用于绑定viewHolder

第三个方法用于创建viewHolder

返回值是viewHolder

用户只要实现自己的ViewHolder就可以了,该组件会自动帮你回收并复用每一个item

补充:设置菜单栏时,默认图标是3个点,可以自己去自定义view actionbar.setCustomView(view)
Actionbar.hide()隐藏菜单栏显示的view

由于要对RecycleView的条目进行操作,而RecyclerView没有条目的点击事件,只有setOnClickListener()点击事件:如果我们要删除或添加就拿不到对应的索引,可以通过setTag(),和getTag()去拿到对应的索引

itemView.setTag(R.id.itemView, position);
int pos= (int) itemView.getTag();

 

你可能感兴趣的:(安卓新特性)