glmis项目工作日志1_使用RecyclerView_DrawerLayout全屏滑动_使用ButterKnife

glimis是老师带着我们为学院做的项目,分为web端和手机端,手机端的功能很简单,学生用户可以进行辅修的报名及缴费,教师用户可以申请教师和在线缴党费。现在web端正在设计实体类,而前几周我们已经整理好用户的需求并建立了原型。我们做好了初步的界面,使用了android studio自带的滑动菜单模板。但是检出王妹同学的源码发现她用的是ListView而不是RecyclerView。于是我改成了RecyclerView,并使用了ButterKnife插件。DrawerLayout默认是边缘才可以滑动,利用setDrawerLeftEdgeSize方法改成了全屏滑动。


使用RecyclerView

参照鸿洋大神的Android RecyclerView 使用完全解析 体验艺术般的控件

自定义了一个adapter

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder>
{

    private List<String> mDatas;
    private LayoutInflater mInflater;

    public interface OnItemClickLitener
    {
        void onItemClick(View view, int position);
        void onItemLongClick(View view, int position);
    }

    private OnItemClickLitener mOnItemClickLitener;

    public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
    {
        this.mOnItemClickLitener = mOnItemClickLitener;
    }


    public MyRecyclerViewAdapter(Context context, List<String> datas)
    {
        mInflater = LayoutInflater.from(context);
        mDatas = datas;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        MyViewHolder holder = new MyViewHolder(mInflater.inflate(
                R.layout.notice_list_item, parent, false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position)
    {
        holder.tv.setText(mDatas.get(position));

        // 如果设置了回调,则设置点击事件
        if (mOnItemClickLitener != null)
        {
            holder.itemView.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickLitener.onItemClick(holder.itemView, pos);
                }
            });

            holder.itemView.setOnLongClickListener(new OnLongClickListener()
            {
                @Override
                public boolean onLongClick(View v)
                {
                    int pos = holder.getLayoutPosition();
                    mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
//                  removeData(pos);//不想实现长按删除就注释掉
                    return false;
                }
            });
        }
    }

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

    public void addData(int position)
    {
        mDatas.add(position, "Insert One");
        notifyItemInserted(position);
    }


    public void removeData(int position)
    {
        mDatas.remove(position);
        notifyItemRemoved(position);
    }

    class MyViewHolder extends ViewHolder
    {

        TextView tv;

        public MyViewHolder(View view)
        {
            super(view);
            tv = (TextView) view.findViewById(R.id.tv_notice);
        }
    }
}

在mainActivity使用


        mAdapter = new MyRecyclerViewAdapter(this, mDatas);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter);

布局文件改为RecyclerView

<android.support.v7.widget.RecyclerView
        android:id="@+id/my_notice_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/info_action_bar"
        android:divider="#ffff0000"
        android:dividerHeight="10dp">

</android.support.v7.widget.RecyclerView>

设置DrawerLayout全屏滑动

使用setDrawerLeftEdgeSize方法利用反射更改滑动区域。

 /**
     * 设置左滑侧滑的边缘大小
     * @param activity activity名称
     * @param drawerLayout drawerLayout布局
     * @param displayWidthPercentage 区域
     */
    private static void setDrawerLeftEdgeSize(Activity activity, DrawerLayout drawerLayout, float displayWidthPercentage) {
        if (activity == null || drawerLayout == null) return;
        try {
            Field leftDraggerField = drawerLayout.getClass().getDeclaredField("mLeftDragger");
            leftDraggerField.setAccessible(true);
            ViewDragHelper leftDragger = (ViewDragHelper) leftDraggerField.get(drawerLayout);
            Field edgeSizeField = leftDragger.getClass().getDeclaredField("mEdgeSize");
            edgeSizeField.setAccessible(true);
            int edgeSize = edgeSizeField.getInt(leftDragger);
            DisplayMetrics dm = new DisplayMetrics();
            activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
            edgeSizeField.setInt(leftDragger, Math.max(edgeSize, (int) (dm.widthPixels * displayWidthPercentage)));
        } catch (Exception e) {
        }
    }

调用时只需一行代码

        setDrawerLeftEdgeSize(this, drawer, 1.0f);//全屏侧滑

ButterKnife插件的使用

在setting里安装插件,插件名称Android ButterKnife Zelezny
在build.gradle里添加

    compile 'com.jakewharton:butterknife:7.0.0'

在activity里使用

onCreate里

        ButterKnife.bind(this);

    @Bind(R.id.toolbar)
    Toolbar toolbar;

具体的使用参照Butterknife 使用指南

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值