打造属于自己的安卓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 ...
随机推荐
- flask-基础知识
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- S5第一次月考
# Python五期月考一 # 1 介绍 # 满分100分,90分及格 # # 考试范围: # 1.Python语法 # 2.数据类型 # 3.流程控制 # 4.函数 # 5.模块 # # 考试时间: ...
- linq中将int类型转换为string类型,toString()报错
今天同事在调试程序的时候,报了一个不寻常的错误, “LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式 ...
- Oracle数据安全(三)权限管理
一.权限概述 所谓权限就是执行特定类型SQL命令或访问其他模式对象的权利.用户在数据库中可以执行什么样的操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限. 在Oracle中将权限分为系统 ...
- iconfont的使用
首先你要有一个图标库的账号,我们使用的是阿里矢量图标库,其次你要有一套已经设计好的图标原图.如果你具备了这些,就可以和我一起看iconfont的使用姿势了. 写在前面 不结合其他矢量库或UI框架一起使 ...
- ubuntu中在Launcher上添加Android Studio的运行图标
运行命令创建desktop文件: sudo gedit /usr/share/applications/android_studio.desktop 打开窗口后输入以下内容,注意Exec和Icon要修 ...
- 谁说程序员不懂爱情【Her】
2014.8.17日 我和我女朋友恋爱两周年的日子.走到今天很不容易,我很珍惜. 就想趁这机会,尽自己能力做一个特别的礼物. 这款应用两周前就开始计划了.也熬了几个晚上.接触wp开发时间不长,第一款应 ...
- 手机调取摄像头问题(getUserMedia)
先说坏消息,苹果机没法玩这个!!! 而且,必须拥有 https 的安全协议!!! 而安卓机想完成这个功能倒是很 easy 的,看一眼代码 主要传入三个参数,配置对象,成功,失败 var mediaOp ...
- jQuery图片垂直滚动焦点图
在线演示 本地下载
- 源码编译配置lnmp部署zabbix
环境说明: [root@wcy ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@wcy ~]# uname -a Linux ...