干货开始:
第一步:
private PopupWindow windowpx,定义全局PupupWindow。
第二步:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <View android:layout_width="match_parent" android:layout_height="2px" android:background="@color/background" /> <TextView android:id="@+id/poppaixu_jiangxu" android:layout_width="match_parent" android:layout_height="80px" android:gravity="center" android:text="价格从高到低" android:textColor="#333333" android:textSize="28px"></TextView> <View android:layout_width="match_parent" android:layout_height="2px" android:background="@color/background" /> <TextView android:id="@+id/poppaixu_shengxu" android:layout_width="match_parent" android:layout_height="80px" android:gravity="center" android:text="价格从低到高" android:textColor="#333333" android:textSize="28px"></TextView> <View android:layout_width="match_parent" android:layout_height="2px" android:background="@color/background" /> <TextView android:id="@+id/poppaixu_xiaoliang" android:layout_width="match_parent" android:layout_height="80px" android:gravity="center" android:text="销量排行" android:textColor="#333333" android:textSize="28px"></TextView> <View android:layout_width="match_parent" android:layout_height="2px" android:background="@color/background" /> </LinearLayout>
自定义xml。
注意:因为我用的AutoUtils用来做屏幕适配,所以自己定义的时候使用dp为单位。
第三步:
//控件下方弹出窗口 private void showPXPopupWindow(View view1) { //自定义布局,显示内容 View view = LayoutInflater.from(GoodsListActivity.this).inflate(R.layout.popop_paixu, null); final TextView jiangxu = (TextView) view.findViewById(R.id.poppaixu_jiangxu); jiangxu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearView(); paixuTv.setTextColor(Color.parseColor("#e50b0b")); paixuImg.setImageResource(R.drawable.shengxu); paixuTv.setText(jiangxu.getText().toString().trim()); windowpx.dismiss(); orderBy = 1; initData(page); } }); final TextView shengxu = (TextView) view.findViewById(R.id.poppaixu_shengxu); shengxu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearView(); paixuTv.setTextColor(Color.parseColor("#e50b0b")); paixuImg.setImageResource(R.drawable.jiangxu); paixuTv.setText(shengxu.getText().toString().trim()); windowpx.dismiss(); orderBy = 2; initData(page); } }); final TextView xiaoliang = (TextView) view.findViewById(R.id.poppaixu_xiaoliang); xiaoliang.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { clearView(); paixuTv.setTextColor(Color.parseColor("#e50b0b")); paixuImg.setImageResource(R.drawable.shengxu); paixuTv.setText(xiaoliang.getText().toString().trim()); windowpx.dismiss(); orderBy = 3; initData(page); } }); AutoUtils.auto(view); windowpx = new PopupWindow(view, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, true); windowpx.setTouchable(true); windowpx.setTouchInterceptor(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; //这里如果返回true的话,touch事件将被拦截 //拦截后 PoppWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss } }); //(注意一下!!)如果不设置popupWindow的背景,无论是点击外部区域还是Back键都无法弹框 windowpx.setBackgroundDrawable(getResources().getDrawable(R.drawable.white)); windowpx.showAsDropDown(view1); }
添加显示方法,
其中传入的参数View1为popup要显示在该控件的下方。
注意:
1、因为我用的AutoUtils用来做屏幕适配,你如果不需要
AutoUtils.auto(view);
第三步中的这段代码可以删除。
2、
//(注意一下!!)如果不设置popupWindow的背景,无论是点击外部区域还是Back键都无法弹框 windowpx.setBackgroundDrawable(getResources().getDrawable(R.drawable.white));这个地方,我放入的R.drawable.white我是直接放了一个白色的背景图片。你也可以让UI给你一张特别小的全透明空背景顶数。
3、onClick里面的方法自己写。
记着写windowpx.dismiss();
我里面的代码是写的当点击选中其中的排序后,上面显示区域的TextView显示成选择后的值。
4、我写的是列表固定的,有时间的话,我会整理里面放入Recyclerview用来选择的PopupWindow、其实原理都一样,只需要view.findViewById()。找出来你放到布局文件里面的Recyclerview、然后自己放适配器就行。