Menu的几种基础用法

本文在同一Activity中介绍添加Menu(菜单)的几种方法,以及对点击菜单选项的事件处理方法

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        menu.add("1");//直接用add添加名为“1”的菜单,无需配置menu文件
        menu.add("2");
        new MenuInflater(this).inflate(R.menu.main_menu,menu);//通过已经创建好的menu文件来添加菜单
        return true;
    }


    /*通过反射来调用显示icon的方法使得menu的icon正常显示出来*/
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        if(menu != null){
            if(menu.getClass() == MenuBuilder.class){
                try{
                    Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible",Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu,true);
                }catch(Exception e){e.printStackTrace();}
            }
        }return super.onMenuOpened(featureId,menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        //通过getItemId()方法来获取点击菜单的Id来进行判断
        if(item.getItemId()==R.id.item1){Toast.makeText(this,"click item1",Toast.LENGTH_SHORT).show();}
        //通过getTitle()方法来获取点击菜单的Id的字符串来进行判断
        if(item.getTitle().toString()=="2"){Toast.makeText(this,"cilck 2",Toast.LENGTH_SHORT).show();}
        //通过getTitle()方法来取得所选(点击)的菜单选项的对应id,并通过toString()方法转换成字符串
        switch(item.getTitle().toString()){
            case "1":
                Toast.makeText(this,"click 1",Toast.LENGTH_SHORT).show();
              break;
            default:
              break;
        }return true;
    }
}

下面这段代码是添加菜单到Activity中的两种用法:

menu.add("1");//直接用add添加名为“1”的菜单,无需配置menu文件
new MenuInflater(this).inflate(R.menu.main_menu,menu);//通过已经创建好的menu文件来添加菜单

下面这段代码是获取点击菜单选项来作对应判断的几种用法:

 //通过getItemId()方法来获取点击菜单的Id来进行判断
if(item.getItemId()==R.id.item1){Toast.makeText(this,"click item1",Toast.LENGTH_SHORT).show();}
//通过getTitle()方法来获取点击菜单的Id的字符串来进行判断
if(item.getTitle().toString()=="2"){Toast.makeText(this,"cilck 2",Toast.LENGTH_SHORT).show();}
//通过getTitle()方法来取得所选(点击)的菜单选项的对应id,并通过toString()方法转换成字符串
switch(item.getTitle().toString())

如下图所示,1、2两个选项是通过add添加的,而菜单1、2、3是通过menu文件的配置来添加进去的
在这里插入图片描述

在配置菜单进行输出时,会出现菜单的图标不显示的情况,这是因为系统默认为私有,需要使用反射来进行显示的调用

 /*通过反射来调用显示icon的方法使得menu的icon正常显示出来*/
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        if(menu != null){
            if(menu.getClass() == MenuBuilder.class){
                try{
                    Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible",Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu,true);
                }catch(Exception e){e.printStackTrace();}
            }
        }return super.onMenuOpened(featureId,menu);
    }

MainActivity布局文件无需去看,因为我们没有在里面添加任何内容,我们只需要看menu配置文件内容即可:

<?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/item1"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="菜单1"
        app:showAsAction="always" />
    <item
        android:id="@+id/item2"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="菜单2"
        app:showAsAction="always" />
    <item
        android:id="@+id/item3"
        android:icon="@android:drawable/btn_star_big_on"
        android:title="菜单3"
        app:showAsAction="always" />
</menu>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值