RecyclerView+PopupWindow 自定义弹框
来源:互联网 发布:社交网络未来趋势 编辑:程序博客网 时间:2024/06/04 18:20
好久没写博客了,从7月份一直实习到现在,趁着过年有时间,整理一下今年学到的东西,弹框是我们一直需要的控件之一,所以弄一个好的弹框显示是蛮有必要的,这是我在我的项目里自己封装的一个弹框控件。
我们采用RecyclerView + PopupWindow要封装我们的弹框控件的样式,RecyclerView很强大,是谷歌新出的控件将会取代ListView,如果你还不会使用,应该去学习如何使用它,并且封装自己的RecyclerView.
首先
/** * 初始化RecyclerView */ public void initRecyclerView(){ if(null == mLayoutManager) mLayoutManager = new LinearLayoutManager(mContext); mRecyclerView.setLayoutManager(mLayoutManager);//设置样式 if(null != mItemAnimato) mItemAnimato = new DefaultItemAnimator(); mRecyclerView.setItemAnimator(mItemAnimato); //设置动画 if(null != mItemDecoration) mRecyclerView.addItemDecoration(mItemDecoration);//设置分割线 }
这里我们先初始化我们的RecyclerView,设置它的基本样式。
private class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,View.OnLongClickListener { private ImageView img; private TextView tv; private MyItemClickListener mListener; private MyItemLongClickListener mLongClickListener; public MyViewHolder(View view,MyItemClickListener listener,MyItemLongClickListener longClickListener) { super(view); img = (ImageView) view.findViewById(R.id.pop_img); tv = (TextView) view.findViewById(R.id.pop_tv); this.mListener = listener; this.mLongClickListener = longClickListener; view.setOnClickListener(this); view.setOnLongClickListener(this); } @Override public void onClick(View v) { if(mListener != null){ mListener.onItemClick(v,getPosition()); } } @Override public boolean onLongClick(View v) { if(mLongClickListener != null){ mLongClickListener.onItemLongClick(v, getPosition()); } return true; } }
创建我们的Viewholder类,在这个Viewholder类中,尽可能强大点,里面有你需要的样式。
接下来,新建我们的适配器Adapter
private class RecyclerAdapter extends MyBaseAdapter{ private final static int X_TYPE = 1; private final static int Y_TYPE = 2; private final static int Z_TYPE = 3; private List<ListPopInfo> mDatas; private Context mContext; public RecyclerAdapter(Context mContext,List<ListPopInfo> mDatas) { this.mDatas = mDatas; this.mContext = mContext; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { RecyclerView.ViewHolder holder = null; switch (viewType) { case X_TYPE: holder = new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.listpop_item, parent, false), mListener, mLongClickListener); break; case Y_TYPE: break; case Z_TYPE: break; } return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { super.onBindViewHolder(holder, position); switch (getItemViewType(position)) { case X_TYPE: MyViewHolder viewHolder = (MyViewHolder) holder; if(mDatas.get(position).getImgRes() == 0) { viewHolder.tv.setText(mDatas.get(position).getTvRes()); }else { viewHolder.img.setImageResource(mDatas.get(position).getImgRes()); viewHolder.tv.setText(mDatas.get(position).getTvRes()); } } } @Override public int getItemCount() { return null == mDatas ? 0 : mDatas.size() ; } @Override public int getItemViewType(int position) { return mDatas.get(position).getViewType(); }
在这里面我定义了三种样式,不过就实现了一种,预留空间,为以后样式增加做准备
/** * 初始化adapter */ public void initAdapter(){ if(null == mAdapter) mAdapter = new RecyclerAdapter(mContext,mDatas); mRecyclerView.setAdapter(mAdapter); setAdapterListener(); }
初始化我们的Adapter,你可以选择自己在外实现,也可以选择使用默认
最后
/** * 初始化弹框 */ public void initPopWindows(){ mPopWindow = new PopupWindow(view,mWidth,mHeight); mPopWindow.setFocusable(isFocusable); mPopWindow.setOutsideTouchable(isOutsideTouchable); if (null == mDrawable) mDrawable = new BitmapDrawable(); mPopWindow.setBackgroundDrawable(mDrawable); }
初始化弹框让它显示即可,并没有什么难度,只不过会比较好用一点,动态计算传入弹框的高度和宽度即可。至于完整的代码我稍后会上传
2017/2/15
补上项目:地址在这里
2 0
- RecyclerView+PopupWindow 自定义弹框
- android自定义弹窗PopupWindow
- 自定义弹窗对话框PopUpWindow
- 自定义弹窗对话框PopUpWindow
- 利用Popupwindow自定义弹出框
- PopupWindow + RecyclerView的使用
- Android之简单自定义PopupWindow弹框实现
- Android自定义弹框Dialog和Popupwindow的封装使用
- 自定义PopupWindow
- 自定义popupWindow
- 自定义PopupWindow
- 自定义PopupWindow
- PopupWindow自定义
- 自定义popupWindow
- Android 自定义PopupWindow 实现 ListView与PopupWindow结合下拉框
- Android中自定义PopupWindow,动态弹窗。
- android自定义弹出框popupwindow方式实现
- PopupWindow实现android自定义弹出框口
- 基本算法——第七单元 分治
- Spark修炼之道(进阶篇)——Spark入门到精通:第十节 Spark SQL案例实战(一)
- Python获取免费的可用代理
- OpenCV tricks 笔记
- CocosCreator你又从新燃起我对Cocos的激情!
- RecyclerView+PopupWindow 自定义弹框
- c#连接数据库-1
- 基本算法——第八单元 排序
- 第三方开源库:SlidingMenu-Master实现侧拉效果
- JBOSS:Java版本不正确而导致的JBoss无法正常启动
- 欧拉角、四元数和旋转矩阵
- 只用两变量实现两者数据的交换
- 手势
- [CQOI2015]任务查询系统 (可持久化treap)