本文实例讲述了android实现模仿ucweb菜单效果的方法。分享给大家供大家参考。具体如下:
ucweb的菜单看起来不错,自己模仿做一个,思路实现如下:
1、保留menu按键作用
2、用popupwindow作为菜单显示容器
3、用gridview显示所有子菜单
代码如下:
1、布局文件:
popupwindow.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?xml version= "1.0" encoding= "utf-8" ?> <linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "fill_parent" android:background= "#50000000" android:layout_height= "fill_parent" android:gravity= "bottom|center_horizontal" > <linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "320dip" android:background= "@drawable/bkg2" android:id= "@+id/popdialog" android:layout_height= "250dip" android:gravity= "center_vertical|center_horizontal" > <gridview android:id= "@+id/gridview" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:numcolumns= "4" android:verticalspacing= "10dip" android:horizontalspacing= "10dip" android:stretchmode= "columnwidth" android:gravity= "center" /> </linearlayout> </linearlayout> |
item_menu.xml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<?xml version= "1.0" encoding= "utf-8" ?> <relativelayout xmlns:android= "http://schemas.android.com/apk/res/android" android:id= "@+id/relativelayout_item" android:layout_width= "fill_parent" android:layout_height= "wrap_content" android:paddingbottom= "5dip" > <imageview android:id= "@+id/item_image" android:layout_centerhorizontal= "true" android:layout_width= "40dip" android:layout_height= "40dip" > </imageview> <textview android:layout_below= "@id/item_image" android:id= "@+id/item_text" android:layout_centerhorizontal= "true" android:layout_width= "wrap_content" android:layout_height= "wrap_content" style= "@style/text.location" android:text= "选项" ></textview> </relativelayout> |
2、用popupwindow作为菜单显示容器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
view view = this .getlayoutinflater().inflate(r.layout.popwindowdemo, null ); pop = new popupwindow(view, 320 , 450 ); //大小设置为全屏幕,这里硬编码的,可修改 pop.setoutsidetouchable( false ); pop.setbackgrounddrawable( new bitmapdrawable()); pop.setfocusable( true ); //如果不加这个,grid不会响应itemclick pop.settouchinterceptor( new ontouchlistener() { public boolean ontouch(view v, motionevent event) { // todo auto-generated method stub if (event.gety()< 240 ){ //这里处理,当点击gridview以外区域的时候,菜单关闭 if (pop.isshowing()) pop.dismiss(); } log.d( "demo" , "popupwindow::ontouch >>> view: " + v + ", event: " + event); return false ; } }); |
3、初始化gridview:
1
2
3
4
5
6
7
8
9
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
|
/** 菜单图片 **/ int [] menu_image_array = { r.drawable.menu_search, r.drawable.menu_filemanager, r.drawable.menu_downmanager, r.drawable.menu_fullscreen, r.drawable.menu_inputurl, r.drawable.menu_bookmark, r.drawable.menu_bookmark_sync_import, r.drawable.menu_sharepage, r.drawable.menu_quit, r.drawable.menu_nightmode, r.drawable.menu_refresh, r.drawable.menu_more }; /** 菜单文字 **/ string[] menu_name_array = { "搜索" , "文件管理" , "下载管理" , "全屏" , "网址" , "书签" , "加入书签" , "分享页面" , "退出" , "夜间模式" , "刷新" , "更多" }; /** * 构造菜单adapter * * @param menunamearray * 名称 * @param imageresourcearray * 图片 * @return simpleadapter */ private simpleadapter getmenuadapter(string[] menunamearray, int [] imageresourcearray) { arraylist<hashmap<string, object>> data = new arraylist<hashmap<string, object>>(); for ( int i = 0 ; i < menunamearray.length; i++) { hashmap<string, object> map = new hashmap<string, object>(); map.put( "itemimage" , imageresourcearray[i]); map.put( "itemtext" , menunamearray[i]); data.add(map); } simpleadapter simperadapter = new simpleadapter( this , data, r.layout.item_menu, new string[] { "itemimage" , "itemtext" }, new int [] { r.id.item_image, r.id.item_text }); return simperadapter; } menugrid = (gridview) view.findviewbyid(r.id.gridview); menugrid.setadapter(getmenuadapter(menu_name_array, menu_image_array)); |
4、注册menu弹起事件:
1
2
3
4
5
6
|
@override public boolean oncreateoptionsmenu(menu menu) { // todo auto-generated method stub pop.showatlocation(findviewbyid(r.id.mainfrm), gravity.center|gravity.bottom, 0 , 0 ); return false ; //super.oncreateoptionsmenu(menu); } |
5、注册menu子菜单单击事件:
1
2
3
4
5
6
7
8
9
|
menugrid.setonitemclicklistener( new onitemclicklistener() { public void onitemclick(adapterview<?> arg0, view arg1, int arg2, long arg3) { log.v( "demo" , "menugrid.setonitemclicklistener: " +arg2+ " " +arg3); toast.maketext(uimenu. this , "click" +arg2, toast.length_short).show(); if (pop.isshowing()) //关闭菜单 pop.dismiss(); } }); |
6、界面截图:
希望本文所述对大家的android程序设计有所帮助。