先上效果图:
简单的讲解一下,其实思想就是要有个Listview,popupwindow包着这个列表,此处是封装了一个popupwindow,把需要的数据通过构造函数传入即可,需要的数据有列表的list内容,当前选中的项,监听,需要依附在那个View下显示该popupwindow,具体代码如下:
/**
* Created by lan.zheng on 2016/9/9.
*/
public class RankingPopupWindow extends PopupWindow{
private ListPopupWindowAdapter mListPopupWindowAdapter;
private Listener mListener;
public RankingPopupWindow(final Activity context, List<String> list, String selectName,Listener listener,View view) {
super(context);
mListener = listener;
//拿到基本的item高度,这里给定每个Item的高度和宽度
DisplayMetrics metric = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metric);
float density = metric.density; // 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; // 屏幕密度DPI(120 / 160 / 240)
float titleItemHeight = density*50; //50dp,高
float paddingWight = density*12; //12dp
WindowManager wm = context.getWindowManager();
int width = wm.getDefaultDisplay().getWidth();
//拿到要显示的总高度,超过5个条目时只显示5个,其余滑动显示
int height;
if(list.size() > 5){
height = (int)titleItemHeight * 5;
}else {
height = (int)titleItemHeight * list.size();
}
this.setWidth(LinearLayout.LayoutParams.WRAP_CONTENT);
this.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
View contentView = LayoutInflater.from(context).inflate(R.layout.popup_window_ranking_classify, null);
this.setContentView(contentView);
ListView listView = (ListView) contentView.findViewById(R.id.lv_ranking_classify);
LinearLayout.LayoutParams lp;
lp= (LinearLayout.LayoutParams) listView.getLayoutParams()