有需求就有加班
写一个仿照京东的条件筛选弹窗,按道理讲 Drawerlayout, dialog ,弹窗activity ,popwin 都可以实现的,看自己擅长什么,或者项目适合什么 就用什么写就OK;
我是选择用popwin写的, 因为正好之前别的写了弹窗选择的对话框,正好部分代码可以用,,
效果图:
上代码(popwin的 关键代码就这么多,直接贴了 自我感觉 注释还是挺详细的):
private void initPop() { /** 自定义 弹窗宽高 */ WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); final Display display = manager.getDefaultDisplay(); /** 获取状态栏高度**/ int statusBarHeight1 = -1; //获取status_bar_height资源的ID int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { //根据资源ID获取响应的尺寸值 statusBarHeight1 = context.getResources().getDimensionPixelSize(resourceId); } View popView = LayoutInflater.from(context).inflate(R.layout.flow_pop_listview, null); //设置view this.setContentView(popView); //设置宽高(也可设置为LinearLayout.LayoutParams.MATCH_PARENT或者LinearLayout.LayoutParams.MATCH_PARENT) this.setWidth(display.getWidth() / 3 * 2);/*屏幕宽度的 2/3 */ this.setHeight(display.getHeight() - statusBarHeight1);/*屏幕高度 部分手机 因为状态栏的高度 会导致底部按钮显示不全,所以减去*/ //设置PopupWindow的焦点 this.setFocusable(true); //设置窗口以外的地方点击可关闭pop this.setOutsideTouchable(true); //设置背景透明 this.setBackgroundDrawable(new ColorDrawable(0x33000000));
this.showAtLocation(popView, Gravity.RIGHT, 0, 0); mListView = (DIYListView) popView.findViewById(R.id.listview); tvReset = (TextView) popView.findViewById(R.id.tv_reset); tvConfirm = (TextView) popView.findViewById(R.id.tv_confirm); nullView = popView.findViewById(R.id.view_null); adapter = new FlowPopListViewAdapter(context, dataList); mListView.setAdapter(adapter); tvReset.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { for (int x = 0; x < dataList.size(); x++) { List<DataBean.ChildItem> childrenBeen = dataList.get(x).getChildren(); for (int y = 0; y < childrenBeen.size(); y++) { if (childrenBeen.get(y).isSelected()) childrenBeen.get(y).setSelected(false); } } adapter.notifyDataSetChanged(); } }); tvConfirm.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //自定义监听第三步 回传监听 onConfirmClickListener.onConfirmClick(); dismiss(); } }); nullView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dismiss(); } }); }
}
另外的就是,布局填充的了,因为内容 文本长度 不固定,所以考虑了流式布局,自适应长度的,自定义了个flowlayout,
就不贴代码了。可以用别的控件代替,
下边是 demo链接,需要的可以参考一下