打造属于自己的安卓menu

来源:互联网 发布:如何使用java 编辑:程序博客网 时间:2024/06/04 17:42

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


看下面的menu菜单,是原装的菜单,好丑陋哦,类似于小编这么爱美的人来说,纯粹就是天大的打击,接受不起。于是,小编就发奋图强,努力,努力,再努力,终于,将菜单改的漂亮了一点,不信你看看。


看到了吧,面对这么漂亮的menu菜单你怎么会不心动呢?心动不如行动,仔细看看下面我是怎么实现的吧:

新建一布局文件menu_main.xml,源代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayoutandroid: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"><LinearLayoutandroid: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"><LinearLayoutandroid: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><LinearLayoutandroid: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><LinearLayoutandroid: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><LinearLayoutandroid: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出来了,心动了吧?那就赶紧打开自己的工程试试吧……

0 0
原创粉丝点击