此文章有本人亲撰,但是下面所提到的code 并非本人所写写这篇日志的目的在于记录这个知识点防止以后忘记同时也希望能帮助可能用到这种效果的人!
需求 就是通过 点击一个button 弹出来 类似于Dialog这样的效果
这里我们可以通过两种方式实现
第一种:就是通过dialog
第二种:通过PopupWindow
第一种如下重要的伪代码如下:
我们需要通过 dialog 弹出来一个 listview
private void openDialog() {
View menuView = View.inflate(this, R.layout.gridview_menu, null);
// 创建AlertDialog
final 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() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if (arg2 == 11) {
menuDialog.cancel();
}
}
});
menuDialog.show();
}
首先拿到 你要显示的listview 组件
然后我们通过设置dialog的view 来显示 显示出来之后 至于 你要在listview 中得item 中 实现什么功能那就要自己 添加了
dialog这一种方式 只是 通过 一个自定义的view 来填充 dialog 本身包含的view(我个人理解是这样的。。)
第二种方式:
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() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
if (arg2 == 11) {
popupWindow.dismiss();
}
}
});
menuGrid.setOnKeyListener(new OnKeyListener() {// 焦点到了gridview上,所以需要监听此处的键盘事件。否则会出现不响应键盘事件的情况
@Override
public 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();
个人理解 就是 LayoutInflater (布局填充者) 获取到我们事先定义好的布局界面
PopupWindow(menuView, LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT, true);
定义弹出来的 组件填充全屏
popupWindow.setBackgroundDrawable(new BitmapDrawable());
这个地方一定要设置 而且一定要设置在
popupWindow.showAtLocation(findViewById(R.id.parent), Gravity.CENTER
| Gravity.CENTER, 0, 0);
之前
我猜想是这样的。。如果popupWindow 没有 画好背景的话他是不会弹出来的,(他必须把需要的东西准备好才会弹出来) ..
至于findViewById(R.id.parent), 这个东西就是你要弹出在那个view之上的那个view Id
。。。
分享到:
相关推荐
NULL 博文链接:https://eagle0824.iteye.com/blog/1432968
Android从下到上弹出透明弹出框
Android自定义弹出多选框实现,实现全选功能,注释比较详细,大家可以直接使用。欢迎大家加入Android技术交流群:276454386,多多交流,多提意见。
Android中长按弹出选项框View进行操作
android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
android 底部弹出菜单(带透明背景)
android推聊+自定义服务器(博客activity伪模态框示例),这是andriod客服端,也是博客文章:”android开发之activity伪模态框“的实例代码
Android中如果要实现模态对话框,普通的dialog是做不到的。有两种方式解决: 1.通过popupwindow实现。 2.通过activity实现。
android全屏弹出框,AlertDialog
android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android自定义弹出框android...
android蓝牙使用,弹出框选择,获取名字和地址
android自定义弹出框实现(修改版).zip
主要为大家详细介绍了Android实现底部半透明弹出框PopUpWindow效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Android炫酷弹出框LemonBubble控件
《Android框架揭秘》通过对Android系统源代码的分析,主要介绍Android框架的初始化过程及主要组件的工作原理。作者直接分析和整理了Android框架的主要源代码,并详细讲解了理解框架工作原理所需的各种基础知识和构成...
android自定义弹出框的实现。 平时做项目时,感觉android自带的弹出框样式比较丑,很多应用都是自己做的弹出框,这里也试着自己做了一个。
android的弹出单选框示例(选择将文本内容通过短信/邮件/剪贴板输出)
android自定义透明对话框,透明提示框,自定义Dialog.zip
android弹出框动画效果,转自别人,在此感谢
Android 单击listview弹出popupwindow弹出框,里面还附带listview右滑删除按钮。博客网址:http://blog.csdn.net/qq_16064871