教你如何创建类似QQ的android弹出菜单
来源:互联网 发布:mac自带的五笔输入法 编辑:程序博客网 时间:2024/05/01 03:24
大家可能看到 android 的自带的系统菜单比较难看,如图:
很多应用都自己定义了系统菜单,
QQ游览器
手机QQ
我今天做的就是类似手机QQ的菜单,效果图如下:
手机QQ
我今天做的就是类似手机QQ的菜单,效果图如下:
这是我用PopupWindow重写一个菜单 ,popupwindow实现弹出菜单功能非常实用,在有布局中经常出现,给用户体验非常不错 ,主要是控制菜单的显示和消失(动画控制),另外对文字和图片(大小最好都一样,否则最后效果有点难看)分别做了适配,其中对文字的长度进行了处理。
下面不用多说,进行代码.需要提一下的是,屏蔽一下系统菜单,需要下面两步1. 需要创建至少一个系统菜单选项
2. 在onMenuOpened方法里显示自己的菜单视图,并返回FALSE
代码片段,双击复制
讲述的很简单,需要对大家有帮助下面附应用的源码.
MenuLikeQQ.rar
2. 在onMenuOpened方法里显示自己的菜单视图,并返回FALSE
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package
cn.mxgsa.menu;
import
java.util.List;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.Gravity;
import
android.view.KeyEvent;
import
android.view.Menu;
import
android.view.View;
import
android.view.ViewGroup.LayoutParams;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.GridView;
import
android.widget.PopupWindow;
import
android.widget.Toast;
public
class
MenuLikeQQActivity
extends
Activity {
/**
* 定义popupwindow
*/
private
PopupWindow popup;
/**
* 定义适配器
*/
private
MenuAdapter menuAdapter;
//菜单项列表
private
List<MenuInfo> menulists;
//定义gridview
private
GridView menuGridView;
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
initPopuWindows();
}
@Override
public
boolean
onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return
true
;
}
/**
* 设置PopupWindows
*/
private
void
initPopuWindows() {
//初始化gridview
menuGridView=(GridView)View.inflate(
this
, R.layout.gridview_menu,
null
);
//初始化PopupWindow,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT控制显示
popup =
new
PopupWindow(menuGridView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
// 设置menu菜单背景
popup.setBackgroundDrawable(getResources().getDrawable(R.drawable.menu_background));
// menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应
popup.setFocusable(
true
);
//设置显示和隐藏的动画
popup.setAnimationStyle(R.style.menushow);
popup.update();
//设置触摸获取焦点
menuGridView.setFocusableInTouchMode(
true
);
//设置键盘事件,如果按下菜单键则隐藏菜单
menuGridView.setOnKeyListener(
new
android.view.View.OnKeyListener() {
public
boolean
onKey(View v,
int
keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if
((keyCode == KeyEvent.KEYCODE_MENU) && (popup.isShowing())) {
popup.dismiss();
return
true
;
}
return
false
;
}
});
//添加菜单按钮事件
menuGridView.setOnItemClickListener(
new
OnItemClickListener() {
public
void
onItemClick(AdapterView<?> arg0, View arg1,
int
arg2,
long
arg3) {
// TODO Auto-generated method stub
MenuInfo mInfo = menulists.get(arg2);
popup.dismiss();
if
(mInfo.ishide) {
return
;
}
switch
(mInfo.menuId) {
case
MenuUtils.MENU_ADD_FRIEND:
Toast.makeText(MenuLikeQQActivity.
this
,
"添加好友"
,
1
).show();
break
;
case
MenuUtils.MENU_ADD_GROUP:
Toast.makeText(MenuLikeQQActivity.
this
,
"添加分组"
,
1
).show();
break
;
case
MenuUtils.MENU_EXIT:
Toast.makeText(MenuLikeQQActivity.
this
,
"退出应用"
,
1
).show();
break
;
case
MenuUtils.MENU_GROUP_ACCURATE:
break
;
case
MenuUtils.MENU_GROUP_CATEGORY:
break
;
case
MenuUtils.MENU_HELP:
Toast.makeText(MenuLikeQQActivity.
this
,
"检查更新"
,
1
).show();
break
;
case
MenuUtils.MENU_LOGOUT:
Toast.makeText(MenuLikeQQActivity.
this
,
"切换用户"
,
1
).show();
break
;
case
MenuUtils.MENU_SERCH_FRIEND:
Toast.makeText(MenuLikeQQActivity.
this
,
"搜索好友"
,
1
).show();
break
;
case
MenuUtils.MENU_SETTING:
Toast.makeText(MenuLikeQQActivity.
this
,
"设置"
,
1
).show();
break
;
}
}
});
}
@Override
public
boolean
onMenuOpened(
int
featureId, Menu menu) {
// TODO Auto-generated method stub
if
(popup !=
null
) {
menulists = MenuUtils.getMenuList();
menuAdapter =
new
MenuAdapter(
this
, menulists);
menuGridView.setAdapter(menuAdapter);
popup.showAtLocation(
this
.findViewById(R.id.linearlayout), Gravity.BOTTOM,
0
,
0
);
}
return
false
;
// 返回为true 则显示系统menu
}
@Override
public
boolean
onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
menu.add(
"menu"
);
return
super
.onPrepareOptionsMenu(menu);
}
}
讲述的很简单,需要对大家有帮助下面附应用的源码.
MenuLikeQQ.rar
- 教你如何创建类似QQ的android弹出菜单
- 教你如何创建类似QQ的android弹出菜单
- 教你如何创建类似QQ的android弹出菜单
- android创建类似QQ的android弹出菜单
- 类似QQ的Web菜单
- 类似QQ/Outlook的菜单
- android 二级listview菜单。类似QQ的好友显示
- Android之PopupWindow类似微信右上角的弹出菜单
- Android之PopupWindow类似微信右上角的弹出菜单
- QQ式样的弹出菜单
- Android类似qq消息滑动菜单
- 类似QQ的垂直菜单(动态)
- 类似QQ的垂直菜单(动态)
- 类似QQ的垂直菜单(动态)
- 类似QQ的垂直菜单(动态)
- 类似QQ的竖型目录菜单
- 类似QQ的竖型目录菜单
- 【Android】创建Popwindow弹出菜单
- Filter 过滤器的执行顺序与实例
- 物化视图刷新的ORA-10632: Invalid rowid错误
- 【译:Styling Android】字体阴影
- linux磁盘管理命令
- ORA-01144: File size (4224000 blocks) exceeds maximum of 4194303
- 教你如何创建类似QQ的android弹出菜单
- Map集合中value()方法与keySet()、entrySet()区别
- 卸载11g R2 RAC 后遗留的init.ohasd引起10g CRS安装故障
- Timer控件用法
- 给django view加上 import file mixin
- realloc,malloc,calloc的区别
- 如何用程序控制session的生命周期
- lua 5.2.2编译安装 LuaSocket 库
- Mapreduce的输入格式