androID RecyclerVIEw不像过去的ListVIEw那样随意的设置水平方向的分割线,如果要实现RecyclerVIEw的水平/垂直分割线,则需要继承自RecyclerVIEw.Itemdecoration重写getItemOffsets方法,从而增加水平/垂直分割线。
写一个例子。
MainActivity.Java:
package zhangphil.app;import androID.content.Context;import androID.graphics.color;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.support.v7.Widget.RecyclerVIEw;import androID.support.v7.Widget.StaggeredGrIDLayoutManager;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.TextVIEw;public class MainActivity extends AppCompatActivity { @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); RecyclerVIEw mRecyclerVIEw = (RecyclerVIEw) findVIEwByID(R.ID.recyclerVIEw); // 两列 int spanCount = 2; // StaggeredGrIDLayoutManager管理RecyclerVIEw的布局。 StaggeredGrIDLayoutManager mLayoutManager = new StaggeredGrIDLayoutManager(spanCount,StaggeredGrIDLayoutManager.VERTICAL); mRecyclerVIEw.setLayoutManager(mLayoutManager); //为RecyclerVIEw增加分割线,水平和垂直方向都有。增加分割线值比如为32。 RecyclerVIEwItemdecoration decoration = new RecyclerVIEwItemdecoration(32); mRecyclerVIEw.addItemdecoration(decoration); RecyclerVIEwAdapter mAdapter = new RecyclerVIEwAdapter(this); mRecyclerVIEw.setAdapter(mAdapter); } private class ItemVIEwHolder extends RecyclerVIEw.VIEwHolder { private TextVIEw text; public ItemVIEwHolder(VIEw itemVIEw) { super(itemVIEw); text = (TextVIEw) itemVIEw.findVIEwByID(androID.R.ID.text1); text.setTextcolor(color.WHITE); } } public class RecyclerVIEwAdapter extends RecyclerVIEw.Adapter<ItemVIEwHolder> { private Context context; public RecyclerVIEwAdapter(Context context) { super(); this.context = context; } @OverrIDe public ItemVIEwHolder onCreateVIEwHolder(VIEwGroup vIEwGroup,int vIEwType) { VIEw vIEw = VIEw.inflate(context,androID.R.layout.simple_List_item_1,null); vIEw.setBackgroundcolor(color.RED); ItemVIEwHolder holder = new ItemVIEwHolder(vIEw); return holder; } @OverrIDe public voID onBindVIEwHolder(ItemVIEwHolder vIEwHolder,int pos) { vIEwHolder.text.setText(String.valueOf(pos)); } @OverrIDe public int getItemCount() { return 15; } }}
布局文件,很简单,就放一个RecyclerVIEw,注意背景颜色的设置:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:background="@androID:color/holo_orange_light"> <androID.support.v7.Widget.RecyclerVIEw androID:ID="@+ID/recyclerVIEw" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> </androID.support.v7.Widget.RecyclerVIEw></relativeLayout>
最关键的RecyclerVIEwItemdecoration.java:
package zhangphil.app;/** * Created by Phil on 2016/10/8. */import androID.graphics.Rect;import androID.support.v7.Widget.RecyclerVIEw;import androID.vIEw.VIEw;/** * 为RecyclerVIEw增加间距 * 预设2列,如果是3列,则左右值不同 */public class RecyclerVIEwItemdecoration extends RecyclerVIEw.Itemdecoration { private int space = 0; private int pos; public RecyclerVIEwItemdecoration(int space) { this.space = space; } @OverrIDe public voID getItemOffsets(Rect outRect,VIEw vIEw,RecyclerVIEw parent,RecyclerVIEw.State state) { outRect.top = space; //该VIEw在整个RecyclerVIEw中位置。 pos = parent.getChildAdapterposition(vIEw); //取模 //两列的左边一列 if (pos % 2 == 0) { outRect.left = space; outRect.right = space / 2; } //两列的右边一列 if (pos % 2 == 1) { outRect.left = space / 2; outRect.right = space; } }}
代码运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的Android RecyclerView实现水平、垂直方向分割线全部内容,希望文章能够帮你解决Android RecyclerView实现水平、垂直方向分割线所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)