Android菜单使用

使用代码创建菜单的方式会使的代码臃肿,不利于后期修改和维护,程序可读性低,故下面介绍Andoird流行和推荐的菜单的定义方式:XML文件定义菜单。

进入正题,XML定义菜单的实例代码如下:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:title="@string/font_size"
    android:icon="@drawable/font"
    android:showAsAction="ifRoom|withText">
    <menu>
        <!--定义一组单选菜单项-->
        <group android:checkableBehavior="single">
            <item
                android:id="@+id/font_10"
                android:title="@string/font_10" />
            <item
                android:id="@+id/font_12"
                android:title="@string/font_12"/>
            <item
                android:id="@+id/font_14"
                android:title="@string/font_14"/>
            <item
                android:id="@+id/font_16"
                android:title="@string/font_16"/>
        </group>
    </menu>
    </item>
    <!--定义一个普通菜单项-->
    <item android:title="@string/plain_item"
        android:id="@+id/plain_item">
    </item>
    <item
        android:title="@string/font_color"
        android:icon="@drawable/color"
        android:showAsAction="ifRoom|withText">
        <menu>
            <!--定义一组多选菜单项-->
            <group android:checkableBehavior="all">
                <item android:id="@+id/font_red"
                      android:title="@string/font_red"/>
                <item android:id="@+id/font_green"
                    android:title="@string/font_green"/>
                <item android:id="@+id/font_blue"
                    android:title="@string/font_blue"/>
            </group>
        </menu>
    </item>
</menu>

一、选项菜单加载到Activity中的方法如下:

在MainAcitivity中创建方法

public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = new MenuInflater(this);
        inflater.inflate(R.menu.menu_main,menu);
        return super.onCreateOptionsMenu(menu);
    }
 public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.font_10:
                txt.setTextSize(10 * 2);
                item.setChecked(true);  //  这条语句设置点击后的已选择效果
                break;
            case R.id.font_12:
                txt.setTextSize(12 * 2);
                item.setChecked(true);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

onCreateOptionsMenu(Menu menu)将定义好的菜单文件加载到Activity的菜单中去
onOptionsItemSelected(MenuItem item){}设置菜单项的点击事件

二、对于上下文菜单
在Activity中新建下面两个方法:
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = new MenuInflater(this);
        inflater.inflate(R.menu.context_menu,menu);
        menu.setHeaderIcon(R.drawable.color);
        menu.setHeaderTitle("请选择背景颜色");
    }
 public boolean onContextItemSelected(MenuItem item) {
        switch(item.getItemId())
        {
            case R.id.red:
                //  你的操作
                break;
        }
        return super.onContextItemSelected(item);
    }
onCreateContextMenu(Menu menu)将定义好的菜单文件加载到Activity的菜单中去
onContextItemSelected(MenuItem item){}设置上下文菜单项的点击事件
需要使用上下文菜单的组件可以再Activity中的onCreate()方法中注册上下文菜单,代码如下:
registerForContextMenu(View v); // 组件v注册了上下文菜单,长按该组件就能弹出该上下文菜单
三、PopupMenu创建弹出式菜单,使用步骤如下:
1.  调用 new PopupMenu(Context context,View anchor)创建下拉菜单,anchor是要激发该菜单的组件
(菜单在该anchor下显示)
2.  调用getMenuInflater.inflate(R.menu.x,new PopupMenu(Context context,View anchor))方法
 将菜单资源填充到PopupMenu中去
3. popMenu.show()方法显示弹出菜单

具体使用的代码如下:
PopupMenu popupMenu = new PopupMenu(MainActivity.this,findViewById(R.id.txt)); //  弹出式菜单将在这个id为txt的组件下显示
                getMenuInflater().inflate(R.menu.popup_menu,popupMenu.getMenu());
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override  
                    public boolean onMenuItemClick(MenuItem item) { //  设置弹出式菜单项的点击事件</span>
                        switch(item.getItemId()){
                            case R.id.hide:
                                popupMenu.dismiss();  //隐藏菜单
                                break;
                            default:
                                Toast.makeText(MainActivity.this, "点击了"+item.getTitle()+"菜单项",
                                        Toast.LENGTH_SHORT).show();
                        }
                        return true;
                    }
                });
                popupMenu.show();
其中的R.menu.popup_menu的文件定义如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/search"
        android:title="@string/search"/>
    <item android:id="@+id/edit"
        android:title="@string/edit"/>
    <item android:id="@+id/delete"
        android:title="@string/delete"/>
    <item android:id="@+id/hide"
        android:title="@string/hide"/>
</menu>











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值