打造属于自己的安卓menu
首先,我们来看看这张图吧
看下面的menu菜单,是原装的菜单,好丑陋哦,类似于小编这么爱美的人来说,纯粹就是天大的打击,接受不起。于是,小编就发奋图强,努力,努力,再努力,终于,将菜单改的漂亮了一点,不信你看看。
看到了吧,面对这么漂亮的menu菜单你怎么会不心动呢?心动不如行动,仔细看看下面我是怎么实现的吧:
新建一布局文件menu_main.xml,源代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/widget32" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:id="@+id/widget33" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dp" android:background="@drawable/menu_bg" android:layout_gravity="center_horizontal"> <LinearLayout android:id="@+id/menu_update_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" android:layout_weight="1" android:background="@drawable/menu_btn_bg" android:layout_gravity="center_horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/btn_update" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="更新系统" android:textColor="#eee"/> </LinearLayout> <LinearLayout android:id="@+id/menu_aboutus_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" android:layout_weight="1" android:background="@drawable/menu_btn_bg" android:layout_gravity="center_horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/btn_aboutus" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="关于我们" android:textColor="#eee"/> </LinearLayout> <LinearLayout android:id="@+id/menu_systeminf_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" android:layout_weight="1" android:background="@drawable/menu_btn_bg" android:layout_gravity="center_horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/btn_systeminf" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="系统信息" android:textColor="#eee"/> </LinearLayout> <LinearLayout android:id="@+id/menu_close_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" android:layout_weight="1" android:background="@drawable/menu_btn_bg" android:layout_gravity="center_horizontal"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/btn_close" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="退出系统" android:textColor="#eee"/> </LinearLayout> </LinearLayout> </LinearLayout>
布局完成之后,在想要出现menu的Activity添加onKeyDown事件,代码为:
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //获取 back键 if(menu_display) { //如果 Menu已经打开 ,先关闭Menu menuWindow.dismiss(); menu_display = false; } else { Intent intent = new Intent(); intent.setClass(MainActivity.this,ExitActivity.class); startActivity(intent); } } else if(keyCode == KeyEvent.KEYCODE_MENU) { //获取 Menu键 if(!menu_display) { //获取LayoutInflater实例 inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE); //这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵 //该方法返回的是一个View的对象,是布局中的根 layout = inflater.inflate(R.layout.menu_main, null); //下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单 menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //后两个参数是width和height //menuWindow.showAsDropDown(layout); //设置弹出效果 //menuWindow.showAsDropDown(null, 0, layout.getHeight()); menuWindow.showAtLocation(this.findViewById(R.id.mainmymusic), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置 //如何获取我们main中的控件呢?也很简单 mUpdateBtn=(LinearLayout)layout.findViewById(R.id.menu_update_btn); mAboutusBtn=(LinearLayout)layout.findViewById(R.id.menu_aboutus_btn); mSysteminfBtn=(LinearLayout)layout.findViewById(R.id.menu_systeminf_btn); mCloseBtn = (LinearLayout)layout.findViewById(R.id.menu_close_btn); //下面对每一个Layout进行单击事件的注册吧。。。 //比如单击某个MenuItem的时候,他的背景色改变 //事先准备好一些背景图片或者颜色 mUpdateBtn.setOnClickListener (new View.OnClickListener() { public void onClick(View arg0) { Toast.makeText(MainActivity.this, "没有更新的系统版本", Toast.LENGTH_LONG).show(); menuWindow.dismiss(); //响应点击事件之后关闭Menu } }); mAboutusBtn.setOnClickListener (new View.OnClickListener() { public void onClick(View arg0) { Toast.makeText(MainActivity.this, "我们是一个民间组织哦~~", Toast.LENGTH_LONG).show(); menuWindow.dismiss(); //响应点击事件之后关闭Menu } }); mSysteminfBtn.setOnClickListener (new View.OnClickListener() { public void onClick(View arg0) { Toast.makeText(MainActivity.this, "我的随身听音乐", Toast.LENGTH_LONG).show(); menuWindow.dismiss(); //响应点击事件之后关闭Menu } }); mCloseBtn.setOnClickListener (new View.OnClickListener() { public void onClick(View arg0) { //Toast.makeText(Main.this, "退出", Toast.LENGTH_LONG).show(); Intent intent = new Intent(); intent.setClass(MainActivity.this,ExitActivity.class); startActivity(intent); menuWindow.dismiss(); //响应点击事件之后关闭Menu } }); menu_display = true; } else { //如果当前已经为显示状态,则隐藏起来 menuWindow.dismiss(); menu_display = false; } return false; } return false; }
上面,还需要定义几个变量,需要定义的变量为:
private LinearLayout mCloseBtn,mSysteminfBtn,mAboutusBtn,mUpdateBtn; private boolean menu_display = false; private PopupWindow menuWindow; private LayoutInflater inflater; private View layout;
至此,漂亮的menu出来了,心动了吧?那就赶紧打开自己的工程试试吧……
打造属于自己的安卓menu的更多相关文章
- 安卓Menu键的问题
近期开发中有须要Menu键,结果发现了一个非常尴尬的问题.我的測试机上有Menu键.可是測试平板上没有,队友的測试机上竟然也没有Menu键.这着实有些尴尬... 上网谷歌之后才发现问题所在: 仅仅有在 ...
- 安卓menu的介绍与使用
菜单之前是用户点击系统的菜单键才展示出来的,后来这个键渐渐被移除,菜单变成了点击任意的view都可以展示.菜单非为3种: 1.Options menu and action bar 选项菜单和操作栏 ...
- 打造属于自己的安卓Metro界面
前言: 各位小伙伴,又到了每周更新文章了时候了,本来是周日能发出来呢,这不是赶上清明节吗,女王大人发话了,清明节前两天半陪她玩,只留给我周一下午半天时间写博客,哪里有女王哪里就有压迫呀有木有!好了闲话 ...
- 我们来八一八阿里云OS的实质和历史
有个姓许的朋友在微信公众号上这样评论: 但是楼主对yunos的了解程度有多少,建议去了解下再评价别人,免费给你普及下:http://www.ithome.com/html/digi/109484.ht ...
- 支持多种浏览器的纯css下拉菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Google工程师打造Remix OS系统 桌面版安卓下载
三位前Google工程师打造的Remix OS系统终于来到了PC桌面上,现已可以下载尝鲜. Remix OS for PC基于Android-x86项目,由安卓5.1 Lollipop深度定制而来,不 ...
- 初学安卓开发随笔之 Menu、toast 用法、活动的四种启动模式 以及 一个方便的Base活动类使用方法
Toast toast 是安卓系统的一种非常棒的提醒方式 首先定义一个弹出Toast的触发点,比如可以是按钮之类 其中 Toast.LENGTH_SHORT是指显示时长 还有一个内置变量为Toast. ...
- Nginx集群之.Net打造WebApp(支持IOS和安卓)
目录 1 大概思路... 1 2 Nginx集群之.Net打造WebApp(支持IOS和安卓) 1 3 安卓模拟器... 1 4 MUI框架... 3 ...
- 安卓开发学习之Menu
安卓开发中菜单是一个很重要的组件,从安卓开发文档(http://wear.techbrood.com/guide/index.html)中可以看到,安卓UI设计中的Menu主要分为: A.Option ...
随机推荐
- iOS学习之应用偏好设置
如今,即便是最简单的计算机程序也会包含一个偏好设置窗口,用户可以在其中设置应用专属的选项.在MAC OS X中,Preferences...菜单通常位于应用菜单中.选择该菜单项会弹出一个窗口,用户可以 ...
- python16_day09【Select多路复用】
一.select多路复用 句柄列表11, 句柄列表22, 句柄列表33 = select.select(句柄序列1, 句柄序列2, 句柄序列3, 超时时间) 参数: 可接受四个参数(前三个必须) 返回 ...
- while循环中的break、continue和else
break:直接结束当前循环然后跳到下面的语句.break之后在循环外continue:结束本次循环,跳到下次循环.continue之后依然还在循环内else:这是while循环所特有,当循环结束之后 ...
- 14链表中倒数第k个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 快慢指针 快指针 先走k 步, 然后快慢指针一起走 当快指针走到null 时, 慢指针就是所求的倒数第k个节点 tips: 判断k是否 ...
- shell 学习一
一.shell脚本 打开文本编辑器(可以使用vi/vim命令来创建文件),新建一个文件test.sh,扩展名为sh(sh代表shell),扩展名并不影响脚本执行 #!/bin/bash echo &q ...
- 小技巧|使用Vue.js的Mixins复用你的代码
Vue中的混入 mixins 是一种提供分发 Vue 组件中可复用功能的非常灵活的方式.听说在3.0版本中可能会用Hooks的形式实现,但这并不妨碍它的强大. 这里主要来讨论 mixins 如何优化我 ...
- BeatSaber节奏光剑插件开发官方教程2-简单的插件示例
原文:https://wiki.assistant.moe/modding/example-mod 一.在开始之前 1 确保你已经看过教你如何添加插件模板的教程,且你已经使用插件模板创建了一个新项目 ...
- 2018-2019-2 20165114《网络对抗技术》Exp5 MSF基础应用
Exp5 MSF基础应用 目录 一.实验目标 二.基础问题回答 三.实验过程记录 3.1主动攻击实践 ms08_067+generic/shell reverse_tcp ms17_010_etern ...
- 回溯算法 DFS深度优先搜索 (递归与非递归实现)
回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 基本思想 将n元问题P的状态空间E表示成 ...
- Cisco、HUAWEI、H3c、Firewall等设备配置snmp
配置HUAWEI交换机S1720.S2700.S5700.S6720等型号设备的snmp v3配置 注:此配置来源自官方配置文档 操作步骤 配置交换机的接口IP地址,使其和网管站之间路由可达 (图1) ...