您的位置:首页 > 移动开发 > Android开发

Android之OptionMenu菜单的使用

2017-02-21 20:47 435 查看
要想在一个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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: