\res\anim\menu_in.xml    资源文件(动画)

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator" >
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="25.0%"
android:toYDelta="0.0" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>

\res\anim\menu_out.xml   资源文件(动画)

<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator" >
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromYDelta="0.0"
android:toYDelta="50.0%" />
<alpha
android:duration="@android:integer/config_shortAnimTime"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>

\res\color\menu_text_color.xml    资源文件(颜色)

<?xml version="1.0" encoding="UTF-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:color="#ff031e3a" />
<item android:state_enabled="false" android:color="#ff778797" />
</selector>

\res\values\colors.xml 资源文件(颜色)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="discuss_blue">#295782</color>
<color name="white">#FFFFFF</color>
<color name="black">#000000</color>
<color name="discuss_writer">#778190</color>
<color name="gray">#ff888888</color>
<color name="photo_preview_select_album_layout_bg">#ff3a3a3a</color>
</resources>

\res\values\styles.xml 资源文件(样式)

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="menuTextStyle" parent="@android:style/TextAppearance.Small">
<item name="android:textSize">12.0sp</item>
<item name="android:textColor">@color/menu_text_color</item>
</style>
<style name="menushow">
<item name="android:windowEnterAnimation">@anim/menu_in</item>
<item name="android:windowExitAnimation">@anim/menu_out</item>
</style>
</resources>

\res\layout\gridview_menu.xml  布局文件(gridview控件)

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gvmenu"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:horizontalSpacing="12.0dip"
android:listSelector="@drawable/menu_selectitem"
android:numColumns="4"
android:stretchMode="columnWidth"
android:verticalSpacing="8.0dip" />

\res\layout\menu_item.xml   布局文件(gridview中的Item)

<?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:paddingTop="6.0dip"
android:saveEnabled="false" > <ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" /> <TextView
android:id="@+id/item_text"
style="@style/menuTextStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_image"
android:layout_centerHorizontal="true"
android:layout_marginTop="7.0dip"
android:text="" /> </RelativeLayout>

\src\cn\mxgsa\menu\MenuInfo.java  实体类

public class MenuInfo {
// 标题
public String title;
public int imgsrc;
// 是否隐藏
public boolean ishide;
// menuId
public int menuId;
public MenuInfo(int menuId, String title,int imgsrc,Boolean ishide){
this.menuId=menuId;
this.title=title;
this.imgsrc=imgsrc;
this.ishide=ishide;
}
}

\src\cn\mxgsa\menu\MenuUtils.java  常量资源类

import java.util.ArrayList;
import java.util.List;
import cn.mxgsa.menu.MenuInfo; public class MenuUtils {
public static final int MENU_SETTING=1;
public static final int MENU_LOGOUT=2;
public static final int MENU_HELP=3;
public static final int MENU_EXIT=4;
public static final int MENU_LOGIN=5;
public static final int MENU_SERCH_FRIEND=6;
public static final int MENU_GROUP_ACCURATE=7;
public static final int MENU_GROUP_CATEGORY=8;
public static final int MENU_CLEAR_LIST=9;
public static final int MENU_ADD_FRIEND=10;
public static final int MENU_ADD_GROUP=11;
public static final int MENU_CHAT_HISTORY=12;
public static final int MENU_ONE_CLOSE=13;
public static final int MENU_MULITE_CLOSE=14; private static List<MenuInfo> initMenu(){
List<MenuInfo> list=new ArrayList<MenuInfo>();
list.add(new MenuInfo(MENU_SETTING,"设置",R.drawable.menu_ic_setting,false));
list.add(new MenuInfo(MENU_LOGOUT,"切换用户",R.drawable.menu_ic_logout,false));
list.add(new MenuInfo(MENU_HELP,"检查更新",R.drawable.menu_ic_help,false));
list.add(new MenuInfo(MENU_EXIT,"退出应用",R.drawable.menu_ic_exit,false));
return list;
} /**
* 获取当前菜单列表
* @return
*/
public static List<MenuInfo> getMenuList(){
List<MenuInfo> list=initMenu();
list.add(0,new MenuInfo(MENU_SERCH_FRIEND,"搜索好友",R.drawable.menu_ic_search_friend,false));
list.add(0,new MenuInfo(MENU_ADD_GROUP,"添加分组",R.drawable.menu_ic_addgroup,false));
list.add(0,new MenuInfo(MENU_ADD_FRIEND,"添加好友",R.drawable.menu_ic_addfriend,false));
list.add(0,new MenuInfo(MENU_SERCH_FRIEND,"搜索好友",R.drawable.menu_ic_search_friend,false)); return list;
} }

\src\cn\mxgsa\menu\MenuAdapter.java

import java.util.List;
import cn.mxgsa.menu.MenuInfo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView; public class MenuAdapter extends BaseAdapter { private final List<MenuInfo> list;
private final LayoutInflater inflater;
public MenuAdapter(Context context,List<MenuInfo> list){
this.list=list;
inflater=LayoutInflater.from(context);
} public int getCount() {
// TODO Auto-generated method stub
return list.size();
} public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
} public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
} public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
View view=arg1;
if (view==null) {
view=inflater.inflate(R.layout.menu_item, null);
}
MenuInfo mInfo=list.get(arg0);
ImageView iView=(ImageView)view.findViewById(R.id.item_image);
TextView tView=(TextView)view.findViewById(R.id.item_text);
iView.setImageResource(mInfo.imgsrc);
tView.setText(mInfo.title);
if (mInfo.ishide) {
iView.setAlpha(80);
}
return view;
} }

\src\cn\mxgsa\menu\MenuLikeQQActivity.java

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; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initPopuWindows();
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
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) {
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) {
menu.add("menu");
return super.onPrepareOptionsMenu(menu);
}
}

DEMO完整源码:http://download.csdn.net/detail/androidsj/5597723

Android 按Menu弹出菜单的更多相关文章

  1. 【转】android创建Popwindow弹出菜单的两种方式

    方法一的Activity package com.app.test02; import android.app.Activity; import android.os.Bundle; import a ...

  2. android 长按弹出菜单,复制,粘贴,全选

    <!-- 定义基础布局LinearLayout --> <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  3. Android 使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  4. Android开发技巧——使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  5. Android ListView两种长按弹出菜单方式

    转自:http://www.cnblogs.com/yejiurui/p/3247527.html package com.wyl.download_demo; import java.util.Ar ...

  6. 【转】 教你如何创建类似QQ的android弹出菜单

    原文地址:http://www.apkbus.com/android-18034-1-1.html 大家可能看到android的自带的系统菜单比较难看,如图: 2011-12-4 23:13 上传 下 ...

  7. 【Android】5.6 弹出菜单(PopUp Menus)

    分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 功能描述:用户单击按钮弹出菜单.当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失:如果 ...

  8. Android ListView 长按列表弹出菜单

    Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...

  9. Android的Toolbar(含溢出菜单设置[弹出菜单的使用])的使用PopMenu的样式

    http://blog.csdn.net/yingtian648/article/details/52432438(转载) 1.在Toolbar.xml中设置弹出菜单的风格(app:popupThem ...

随机推荐

  1. RMAN Recovery Catalog

    RMAN用来存放数据库元数据的schema. the catalog includes the following types of metadata:-Data file and archived ...

  2. 读写SQLServer数据库中的image类型数据(简单)

    1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...

  3. VC++编写ActiveX控件

    ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual ...

  4. Hadoop知识汇总

    Hadoop的两大功能:海量数据存储和海量数据分析 Hadoop2的三大核心组件是:HDFS.MapperReducer和yarn 1.HDFS:分布式文件系统海量数据存储 2.MapperReduc ...

  5. atitit.自己动手开发编译器and解释器(1) ------词法分析--attilax总结

    atitit.自己动手开发编译器and解释器(1) ------词法分析--attilax总结 1.   应用场景:::DSL 大大提升开发效率 1 2. 2. 流程如下::: 词法分析(生成toke ...

  6. DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站差点儿已经是标配.假设想来点高级的--在无人机上直接处理拍摄的图像并实现自己主动控制要怎么实现 ...

  7. ZOJ Problem Set - 2297 Survival 【状压dp】

    题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死 ...

  8. 安装CentOS版本的yum(转载)

    安装CentOS版本的yum 下载源:http://mirrors.163.com/centos/6/os/i386/Packages/ 材料准备: python-iniparse-0.3.1-2.1 ...

  9. Unicode Table

    Unicode Table http://www.tamasoft.co.jp/en/general-info/unicode.html   00 01 02 03 04 05 06 07 08 09 ...

  10. js数组最大值和最小值计算

    基本概念 reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为一个值. reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被 ...