前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >打造属于自己的安卓menu

打造属于自己的安卓menu

作者头像
lzugis
发布2018-10-23 15:52:19
5210
发布2018-10-23 15:52:19
举报

首先,我们来看看这张图吧

看下面的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出来了,心动了吧?那就赶紧打开自己的工程试试吧……

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014年01月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档