Options Menu详解

来源:互联网 发布:mac相册里照片如何删除 编辑:程序博客网 时间:2024/06/16 22:51

使用XML文件定义菜单资源的好处:
有利于观察菜单结构
菜单资源和逻辑代码分离,有利于维护
菜单资源可以被不同的平台,版本等所用

package com.studio.optionsmenudemo;import android.app.Activity;import android.graphics.Color;import android.support.v4.widget.TextViewCompat;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.widget.TextView;import android.widget.Toast;/** * 演示OptionsMenu的使用 */public class MainActivity extends Activity {    private TextView tvShow;    private  float fontSize=15.0f;    private static final int ITEMID = 4;//菜单项ID    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        tvShow = (TextView) findViewById(R.id.tv_show);        tvShow.setTextSize(fontSize);//设置textview中初始的字体大小    }    /**     * 表示当activity创建选项菜单时回调的方法     * @param menu     * @return     *         true 用来显示菜单项     *          false 无法显示菜单项     */    @Override    public boolean onCreateOptionsMenu(Menu menu) {         //创建菜单的第一种方式   加载XML文件        //获取菜单填充器对象        getMenuInflater().inflate(R .menu.main,menu);         //创建菜单的第二种方式   使用add方法        //add(groupId 菜单项分组,ItemId 菜单项唯一标识id,order 表示菜单项的排序,菜单项展示的文本)        menu.add(Menu.NONE,ITEMID,Menu.NONE,"设置字体");        //处理菜单项点击事件的第三种方式        final MenuItem item = menu.findItem(R.id.action_style);        item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {            @Override            public boolean onMenuItemClick(MenuItem menuItem) {                Toast.makeText(MainActivity.this,item.getTitle().toString(),Toast.LENGTH_SHORT).show();                return false;            }        });        return true;    }    /**     * 表示当选项菜单中的item被选中时回调的方法     * @param item 表示菜单项对象     * @return     */    @Override    public boolean onOptionsItemSelected(MenuItem item) {        int itemId=item.getItemId();//获取当前点击菜单项的资源id        switch (itemId){            case R.id.action_add:                fontSize+=5;                tvShow.setTextSize(fontSize);//点击设置字体大小                break;            case R.id.action_sub:                fontSize-=5;                tvShow.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);                tvShow.setTextColor(Color.rgb(red,green,blue));                break;        }        return super.onOptionsItemSelected(item);    }    /**     * 表示菜单项中被点击回调的方法     * @param featureId     * @param item     * @return     */    @Override    public boolean onMenuItemSelected(int featureId, MenuItem item) {        int itemId=item.getItemId();        if(itemId==ITEMID){            tvShow.setText("调用了菜单项第二种点击事件");        }        return super.onMenuItemSelected(featureId, item);    }}
<?xml version="1.0" encoding="utf-8"?><menu xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:android="http://schemas.android.com/apk/res/android">    <item        android:id="@+id/font_group"        android:orderInCategory="3"        android:title="@string/font_name">        <!--设置子菜单--><menu>    <item android:id="@+id/action_add" android:title="@string/add"></item>    <item android:id="@+id/action_sub" android:title="@string/sub"></item></menu>    </item>    <item android:id="@+id/action_color"           android:title="@string/str_color"        android:orderInCategory="2">    </item>    <item android:id="@+id/action_style"        android:title="@string/str_style"        android:orderInCategory="1">    </item></menu><!--   android:id="@+id/font_group" 设置当前菜单项的唯一标示   android:title="@string/font_name"设置菜单项的文本   android:orderInCategory="3"设置同种类菜单项的排列顺序-->
原创粉丝点击