今天要写的是,点击一个按钮,弹出一个popupwindow,并且我们的popupwindow背景是模糊的,虚化的,而popupwindow中的内容显示的则是listview。并且对listview进行适配显示。还有popupwindow中的按钮的获取。
实例效果图如下:
点击一个按钮,弹出如上的window,还有listview的显示,并且close按钮的获取监听。
实现这部分,首先就是PopUpWindow的显示以及背景虚化。
声明不必多说:
private ListView list_buy_detail; ListDetailAdapter adapter; private List<Map<String, Object>> buy_detail; private Button btn_detail_close;
在我们上述内容是点击弹出的window,所以在点击监听中写如下代码:
View contentView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_detail_popup_window, null); final PopupWindow popupWindow = new PopupWindow(BuyActivity.this.findViewById(R.id.layout_buy), ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setContentView(contentView); popupWindow.setAnimationStyle(R.style.AnimBottom); ColorDrawable dw = new ColorDrawable(0xe0000000); popupWindow.setBackgroundDrawable(dw); buy_detail = getMessage(); list_buy_detail = (ListView) contentView.findViewById(R.id.list_detail); btn_detail_close = (Button) contentView.findViewById(R.id.btn_detail_close); btn_detail_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { popupWindow.dismiss(); } }); adapter = new ListDetailAdapter(this, buy_detail); list_buy_detail.setAdapter(adapter); popupWindow.setFocusable(true); popupWindow.showAtLocation(BuyActivity.this.findViewById(R.id.layout_buy), Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);分析一下这段代码:
PopUpWindow的定义,以及我们的popupwindow的界面。contentview就是我们的popupwindow的界面资源。
如果要获取popupwindow这个窗口里面的close按钮以及listview的话,我们获取资源的方法按照上述的来findViewById。
点击按钮显示我们的popupwindow,需要用PopUpWindow中的showAtLocation方法来对我们弹出的窗口进行一个定义。可以具体看一下showAtLocation方法中各个参数的意思。
然后我们要显示listview的内容,就跟普通界面一样了。getMessage():
private List<Map<String, Object>> getMessage() { List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>(); for (int i = 0; i < 25; i++) { Map<String, Object> map = new HashMap<String, Object>(); // map.put("image", imgeIDs[i]); //图片资源 map.put("title", "训练单元" + i); //title // map.put("info", goodsNames[i]); //物品名称 // map.put("detail", goodsDetails[i]); //物品详情 listItems.add(map); } return listItems; }对我们的listview进行一个假数据的适配,需要用到我们的listDetailAdapter:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; import java.util.Map; /** * Created by Administrator on 2016/8/23 0023. */ public class ListDetailAdapter extends BaseAdapter { private Context context; private List<Map<String, Object>> detail; public ListDetailAdapter(Context context, List<Map<String, Object>> detail) { this.context = context; this.detail = detail; } @Override public int getCount() { if (detail == null) { return 0; } else { return detail.size(); } } @Override public Object getItem(int position) { if (detail == null) { return 0; } else { return detail.get(position); } } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View contentView, ViewGroup arg2) { ViewHolder holder = null; if (contentView == null) { holder = new ViewHolder(); contentView = LayoutInflater.from(context).inflate(R.layout.list_detail_item, null); holder.buy_title = (TextView) contentView.findViewById(R.id.buy_title); holder.buy_prize = (TextView) contentView.findViewById(R.id.buy_prize); contentView.setTag(holder); } else { holder = (ViewHolder) contentView.getTag(); } holder.buy_title.setText((String) detail.get(position).get("title")); return contentView; } class ViewHolder { public TextView buy_title; public TextView buy_prize; } }根据大家的需求来定义并且适配就Ok啦。至于item的布局啦,还有我们popupwindow的布局文件,大家就自己定义,理解性的将代码运用吧。
该代码中,list_detail_popup_window是我们的弹出的窗口的布局。而list_detail_item则是我们的list的item的布局。
希望能够帮助到大家。