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 使用指南