popwin實現仿京東 商品列表 彈窗 條件篩選 列表彈窗
阿新 • • 發佈:2019-01-04
有需求就有加班
寫一個仿照京東的條件篩選彈窗,按道理講 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連結,需要的可以參考一下