Android之OptionMenu菜单的使用

要想在一个Activity中使用OptionMenu菜单,首先需要在res文件夹下创建一个存放menu资源文件的文件夹,然后再在这个文件夹下创建一个menu资源文件(右键->new->Menu resource file)。

创建之后会生成一个如下的menu资源文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

</menu>

然后我们根据项目要求完成这个资源文件如下,一个<item></> 就是OptionMenu菜单中的一行,当然我们也可以在一个item下再新建一个新的menu,这时我们就要用到<item></item> ,所以在实际项目开发中推荐直接使用后面的写法。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <!--
    item(菜单项)常用属性
    title:设置菜单项显示的文本
    orderInCategory:设置同种类菜单项的排列顺序
    此外还可以在一个<item></item>中设置一个子菜单,具体操作见第一个item
    -->
    <item
        android:id="@+id/font"
        android:orderInCategory="1"
        android:title="@string/font"
        >
        <menu>
            <item
                android:id="@+id/haha"
                android:title="@string/font"
                >

            </item>
        </menu>

    </item>



    <item
        android:id="@+id/font_group"
        android:orderInCategory="4"
        android:title="@string/font_name" >

    </item>


    <item
        android:id="@+id/action_color"
        android:orderInCategory="3"
        android:title="@string/str_color" >

    </item>


    <item
        android:id="@+id/action_style"
        android:orderInCategory="2"
        android:title="@string/str_style" >

    </item>


</menu>

为了方便以后回来可以看懂,将string.xml文件也一并放上

<resources>
    <string name="app_name">MenuDemo</string>
    <string name="font_name">设置字体大小</string>
    <string name="str_color">设置字体颜色</string>
    <string name="str_style">设置字体风格</string>
    <string name="content">操作字体</string>
    <string name="font">设置字体</string>
</resources>

主Activity的布局文件就不放了,就是一个TextView用来演示效果的。

接下来是主Activity的逻辑Java代码,首先我们需要创建一个OptionMenu,因此我们要重写onCreateOptionsMenu方法

    /*
    要想在MainActivity中使用OptionMenu,需要重写onCreatOptionMenu(Menu menu)方法
    它是一个当Activity创建OptionMenu时回调的方法
    若返回值为true则表示可以显示菜单项
    若返回值为false则表示无法显示菜单项
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        //获得菜单填充器对象,并将菜单填充为一个具体的菜单对象
//        MenuInflater menuInflater=getMenuInflater();
//        menuInflater.inflate(R.menu.main,menu);
        //以上两行代码等价为以下一行代码
        getMenuInflater().inflate(R.menu.main, menu);
        return true;//return true表示允许显示菜单项
    }

其中inflate方法中的第一个参数就是我们之前写的菜单资源文件id,第二个参数就是一个菜单对象,这里直接使用onCreatOptionMenu方法传入的menu对象即可。

然后我们需要再重写onOptionItemSelected方法来实现菜单项被点击后的监听事件

    /*
    这个方法在OptionMenu中的某个item被选中时触发,类似于item的监听器
    其中回调的参数item表示被选中的item对象
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
        int itemId=item.getItemId();//获取被选中的item的id
        switch (itemId)
        {
            //点击设置字体大小的item时,MainActivity界面中的字体大小+5
            case R.id.font_group:
            {
                fontSize += 5;
                Toast.makeText(MainActivity.this,textView_show.getText(),Toast.LENGTH_SHORT).show();
                textView_show.setTextSize(fontSize);
                break;
            }
            case R.id.action_color:
            {
                //随机生成颜色
                int red= (int) (Math.random()*256);
                int green= (int) (Math.random()*256);
                int blue= (int) (Math.random()*256);
                //Color.rgb(int,int,int)方法可以利用三原色生成任意颜色
                textView_show.setTextColor(Color.rgb(red,green,blue));
                break;
            }
        }
        return super.onOptionsItemSelected(item);
    }

最终效果图如下

这里写图片描述
当我们点击设置字体颜色的菜单项时,操作字体四个大字会随机变换颜色,当我们点击设置字体大小菜单项时,操作字体四个大字会增大,当我们点击设置字体菜单项时,会进入一个新的OptionMenu
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值