Android实现模仿UCweb菜单效果的方法

本文实例讲述了Android实现模仿UCweb菜单效果的方法。分享给大家供大家参考。具体如下:

UCWeb的菜单看起来不错,自己模仿做一个,思路实现如下:

1、保留menu按键作用
2、用popupwindow作为菜单显示容器
3、用GridView显示所有子菜单

代码如下:

1、布局文件:

popupwindow.xml:

<?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:

<?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作为菜单显示容器:

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:

/** 菜单图片 **/
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弹起事件:

@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子菜单单击事件:

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程序设计有所帮助。

(0)

相关推荐

  • Android编程实现为应用添加菜单的方法

    本文实例讲述了Android编程实现为应用添加菜单的方法.分享给大家供大家参考,具体如下: 添加菜单的方法有很多,一般推荐用xml创建菜单. 建立menu步骤: 在res下建立一个menu文件夹,在menu文件里面添加一个xml文件: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android&

  • Android编程之菜单实现方法

    本文实例讲述了Android编程之菜单实现方法.分享给大家供大家参考,具体如下: 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机都要有一个"menu"键,即菜单键,由此可见菜单在Android程序中的重要与特殊,其中Android的SDK提供了三种类型:分别为options menu(常规菜单),context menu(上下文菜单)和submenu(子菜单).其中options menu是通过按Menu键来显示,context menu

  • Android仿微信顶/底部菜单栏效果

    本文要实现仿微信微信底部菜单栏+顶部菜单栏,采用ViewPage来做,每一个page对应一个XML,当手指在ViewPage左右滑动时,就相应显示不同的page(其实就是xml)并且同时改变底部菜单按钮的图片变暗或变亮,同时如果点击底部菜单按钮,左右滑动page(其实就是xml)并且改变相应按钮的亮度. 一.布局 1.顶部菜单布局,命名为top_layout.xml <?xml version="1.0" encoding="utf-8"?> <R

  • Android动态添加menu菜单的简单方法

    从menu按键开始,涉及以下3个方法: 1.onCreateOptionsMenu(Menu menu)2.onPrepareOptionsMenu(Menu menu)3.onOptionsItemSelected(MenuItem item) 方法名 触发时间onCreateOptionsMenu 进入Launcher后第一次点MENU按钮时触发onPrepareOptionsMenu 有两种情况:1.进入Launcher后第一次点MENU按钮触发onCreateOptionsMenu后调用

  • Android选项菜单用法实例分析

    本文实例讲述了Android选项菜单用法.分享给大家供大家参考.具体如下: Android平台下所提供的菜单大体上可分为三类:选项菜单.上下文菜单和子菜单. 当Activity在前台运行时,如果用户按下手机上的Menu键,此时就会在屏幕低端弹出相应的选项菜单.但这个功能需要开发人员编程来实现的,如果在开发应用程序时没有实现该功能,那么程序运行时按下手机的meun键是不会起作用的. 对于携带图标的选项菜单,每次最多只能显示6个,当菜单选项多于6个时,将只显示前5个和一个扩展菜单选项,点击扩展菜单选

  • Android编程实现二级下拉菜单及快速搜索的方法

    本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法.分享给大家供大家参考,具体如下: 一.我们要做什么? 上面有个搜索框,下面是一个二级下拉菜单. 输入查询内容,下面列表将显示查询结果. 二.界面设计 (1)这是主框架(部分属性已经省去,请看源码),从上至下分别是文本框,列表,二级列表. <?xml version="1.0" encoding="utf-8"?> <LinearLayout> <LinearLayout

  • Android编程之菜单的实现方法实例详解

    本文实例讲述了Android编程之菜单的实现方法.分享给大家供大家参考,具体如下: Options Menu 当用户按下menu button按钮时显示的菜单 Context Menu 当用户长久按住屏幕,被注册显示上下文菜单的视图时显示的菜单 Submenu    当用户按下一个菜单的某个选项时弹出的子菜单 以上三种菜单也就是我们经常所说的:选项菜单,上下文菜单和子菜单. 一.上下文菜单 1. 实现onCreateContextMenu即可创建该菜单 @Override public void

  • Android实现类似于PC中的右键弹出菜单效果

    Android系统中的ContextMenu(上下文菜单)类似于PC中的右键弹出菜单,当一个视图注册到一个上下文菜单时,执行一个在该对象上的"长按"动作,将出现一个提供相关功能的浮动菜单.上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单.  注意:上下文菜单不支持图标和快捷键. 为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu() 和

  • Android开发之menu菜单

    Android系统里面有四种类型的菜单:options menu(选项菜单),context menu(上下文菜单),sub menu(子菜单),Popup menu(弹出菜单). 首先说 选项菜单(OptionsMenu) 一.方法介绍: public booleanonCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . public booleanonOptionsItemSelected(MenuItem item):选中菜单项后发生的动作.

  • Android编程实现自定义系统菜单背景的方法

    本文实例讲述了Android编程实现自定义系统菜单背景的方法.分享给大家供大家参考,具体如下: 不多说,上图,见代码. package lab.sodino.menutest; import android.content.Context; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.AttributeSet; import androi

  • Android仿微信菜单(Menu)(使用C#和Java分别实现)

    本篇是对安卓菜单使用编程方式实现,当然可以使用XML的方式完成同样的功能,基本Java和C#写法都是一致的,所以使用XML的方式在本篇中使用Java演示,需要注意的是,对于如果不是VS开发的话,那么资源文件名称必须以小写开头,否则会报错. 运行效果 C#实现 using Android.App; using Android.OS; using Android.Views; using Android.Widget; namespace MenuDemo { [Activity(Label = "

  • Android上下文菜单用法实例分析

    本文实例讲述了Android上下文菜单用法.分享给大家供大家参考.具体如下: 上下文菜单不同于选项菜单,选项菜单服务于Activity,而上下文菜单则是注册到某个View对象上的. 如果一个View对象注册了上下文菜单,用户可以通过长按该View对象以呼出上下文菜单. 上下文菜单不支持快捷键,其菜单选项也不能附带图标,但是可以为上下文菜单的标题指定图标. 以下模拟上下文菜单 main.xml布局文件: <?xml version="1.0" encoding="utf-

随机推荐