热心推荐:

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

popupwindow实现弹出菜单效果

Android人才招聘——最新招聘

大家可能看到 android 的自带的系统菜单比较难看,如图:

很多应用都自己定义了系统菜单,
QQ游览器

手机QQ

我今天做的就是类似手机QQ的菜单,效果图如下:

这是我用PopupWindow重写一个菜单 ,popupwindow实现弹出菜单功能非常实用,在有布局中经常出现,给用户体验非常不错 ,主要是控制菜单的显示和消失(动画控制),另外对文字和图片(大小最好都一样,否则最后效果有点难看)分别做了适配,其中对文字的长度进行了处理。
下面不用多说,进行代码.需要提一下的是,屏蔽一下系统菜单,需要下面两步1. 需要创建至少一个系统菜单选项

2. 在onMenuOpened方法里显示自己的菜单视图,并返回FALSE

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);
}
}

下载地址

教你如何创建类似QQ的android弹出菜单相关推荐

  1. android 弹出菜单环形,『Android自定义View实战』实现一个小清新的弹出式圆环菜单...

    前言 Android表现快捷菜单的形式有很多种,比如使用PopupWindow弹出来的小弹窗,类似QQ的侧拉功能菜单,以及之前讲过的弧形菜单( Android 自定义弧形旋转菜单栏--卫星菜单),这次 ...

  2. android 弹出菜单 toast,Android学习第二天:Toast(提醒)、Menu(菜单)、Intent的显式和隐式(包括打开、适配网站,调用拨号界面等)...

    1.Toast提醒 为昨天写的按钮程序添加一个提醒,在MainActivity中添加如下代码: Button bt1 = (Button) findViewById(R.id.button_1); b ...

  3. android qq右上加号,仿QQ空间点击加号弹出菜单特效

    最近项目需要,前几天写了一个仿微信相册(包括编辑相册)功能,审核代码的时候发现同事要实现一个类似仿QQ空间点击加号弹出菜单特效,于是看了一些他的代码,我发现虽然他实现了功能,但是不够完善,所以我又花了 ...

  4. android弹出窗口的实现(PopupWindow)

    android弹出窗口的实现(PopupWindow)         最近看到新浪微博顶部栏的微博分组效果很炫,从网上查了一些资料明白原来是用PopupWindow实现的,今天自己也写了一个例子实现 ...

  5. [Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

        这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同 ...

  6. android点击按钮弹出输入框,android 弹出框(输入框和选择框)

    1.输入框: final EditText inputServer = new EditText(this); inputServer.setFilters(new InputFilter[]{new ...

  7. 仿qq等右上角弹出气泡菜单效果

    仿QQ右上角的弹出菜单框 博客同步自:个人博客主页 Screenshots How to Use step 1 Add the JitPack repository to your build fil ...

  8. android 弹出PopupWindow后背景逐渐变暗

    今天,简单讲讲android在弹出  PopupWindow后如何使背景逐渐变暗. 我之前做的效果是在PopupWindow弹出时立即将背景变暗,这个也很简单. 在PopupWindow弹出时,将 ...

  9. android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...

    as per my above comment可以使用Popup Menu Android Popup Menu displays the menu below the anchor text if ...

最新文章

  1. Debian 陷入尴尬,社区或群龙无首
  2. 两难!到底用 Spring BeanUtils 还是 Apache BeanUtils?
  3. 第三部分:Android 应用程序接口指南---第二节:UI---第八章 Toast通知
  4. python中json模块博客园_python的json模块
  5. 数据库实例:用户注册
  6. 计算机中国象棋书籍,[建议]中国的象棋永远不能被没有“思维”的电脑所代替(就目前的电脑象棋软件...
  7. Navigator对象
  8. 深入搜索引擎的关键——索引
  9. PMP考试重点总结八——监控过程组(2)
  10. iOS15绕过激活锁工具TiggerRamDisk3.6,支持最新iOS15.5绕过
  11. flutter Android混淆
  12. Kubernetes能成大事,华为云的眼光“真毒”
  13. 相比于 Java 10 的 var, 更期待 Java 11 支持多行字符串
  14. Qt MDI Window开发
  15. Appium_3_环境配置_Appium-desktop配置
  16. 【Tools】HP/惠普v285w 量产工具
  17. oa处理会签流程图_关于合同会签oa流程使用说明..doc
  18. SpringBoot项目启动时如何自动弹出启动页,如何修改默认启动路径
  19. 11.1 身在大学,不追浮云——《逆袭大学》连载
  20. jQuery:等页面DOM加载完毕后再执行代码

热门文章

  1. Linux apt-get命令
  2. 取得Linux系统的各种统计信息
  3. 查看Oracle耗时Sql
  4. iOS多设备分辨率适配
  5. Mybatis返回Mysql表的自增主键
  6. ASP.NET验证控件
  7. Python两数之和,并返回下标
  8. Auto.js 抖音--留痕--参数分析
  9. swift 3d v6.0汉化中文版
  10. React Native 项目常用第三方组件汇总