首先自定义PopupWindow,主要是个listView。
public SpinerPopWindow(Context context, List<T> list, OnItemClickListener clickListener) {
super(context);
inflater = LayoutInflater.from(context);
this.list = list;
init(clickListener);
}
private void init(OnItemClickListener clickListener) {
View view = inflater.inflate(R.layout.spiner_window_layout, null);
setContentView(view);
setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
setFocusable(true);
ColorDrawable dw = new ColorDrawable(0x00);
setBackgroundDrawable(dw);
mListView = (ListView) view.findViewById(R.id.listview);
mListView.setAdapter(mAdapter = new MyAdapter());
mListView.setOnItemClickListener(clickListener);
}
下面是适配器定义:
private class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_single_text, null);
holder.tvName = (TextView) convertView.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvName.setText(getItem(position).toString());
return convertView;
}
}
private class ViewHolder {
private TextView tvName;
}
然后初始化PopSpinner,其中,
type1是一个TextView,用来显示当前选中的条目文本。当点击Pop条目时,更新文本内容。
arrow1是一个ImageView,展示箭头图片。当显示Pop时,让图片旋转180度。
mSpinerPopWindow1 = new SpinerPopWindow<String>(this, datas1, new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSpinerPopWindow1.dismiss();
if(position >= 0 && position < datas1.size()){
type1.setText(datas1.get(position));
}
}
});
mSpinerPopWindow1.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
arrow1.startAnimation(AnimationUtil.rotateView(180, 0));
}
});
别忘记初始化数据:
//设置Spinner数据源
private void setSpinnerData(){
datas1.clear();
datas1.add("全部");
datas1.add("已取消");
datas1.add("待发货");
datas1.add("已发货");
if(mSpinerPopWindow1 != null){
mSpinerPopWindow1.notifyDataChanged();
}
}
最后调用显示PopSpinner:
//显示PopWindow1
private void showPop1(){
if(mSpinerPopWindow1 == null){
return;
}
mSpinerPopWindow1.setWidth(rlLayout1.getWidth());
mSpinerPopWindow1.showAsDropDown(rlLayout1);
arrow1.startAnimation(AnimationUtil.rotateView(0, 180));
}
运行效果:
需要源码的小伙伴可以底部留言,谢谢配合~