android 中弹出透明模态框
此文章有本人亲撰,但是下面所提到的code 并非本人所写写这篇日志的目的在于记录这个知识点防止以后忘记同时也希望能帮助可能用到这种效果的人!
需求 就是通过 点击一个button 弹出来 类似于Dialog这样的效果
这里我们可以通过两种方式实现
第一种:就是通过dialog
第二种:通过PopupWindow
第一种如下重要的伪代码如下:
我们需要通过 dialog 弹出来一个 listview
private void openDialog() {View menuView = View.inflate(this, R.layout.gridview_menu, null);// 创建AlertDialogfinal AlertDialog menuDialog = new AlertDialog.Builder(this).create();menuDialog.setView(menuView);menuGrid = (GridView) menuView.findViewById(R.id.gridview);menuGrid.setAdapter(getMenuAdapter(menu_name_array,menu_image_array));menuGrid.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {if (arg2 == 11) { menuDialog.cancel();}}});menuDialog.show();}LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);ViewGroup menuView = (ViewGroup) mLayoutInflater.inflate(R.layout.gridview_pop, null, true);menuGrid = (GridView) menuView.findViewById(R.id.gridview);menuGrid.setAdapter(getMenuAdapter(menu_name_array, menu_image_array));menuGrid.requestFocus();menuGrid.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {if (arg2 == 11) {popupWindow.dismiss();}}});menuGrid.setOnKeyListener(new OnKeyListener() {// 焦点到了gridview上,所以需要监听此处的键盘事件。否则会出现不响应键盘事件的情况@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {switch (keyCode) {case KeyEvent.KEYCODE_MENU:if (popupWindow != null && popupWindow.isShowing()) {popupWindow.dismiss();}break;}System.out.println("menuGridfdsfdsfdfd");return true;}});popupWindow = new PopupWindow(menuView, LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, true);popupWindow.setBackgroundDrawable(new BitmapDrawable());popupWindow.setAnimationStyle(R.style.PopupAnimation);popupWindow.showAtLocation(findViewById(R.id.parent), Gravity.CENTER| Gravity.CENTER, 0, 0);popupWindow.update();