AppCompatActivity 中的Menu (菜单)

来源:互联网 发布:mysql服务器硬件配置 编辑:程序博客网 时间:2024/05/21 22:49

最近开发有用到菜单栏。想在actionbar 右边加菜单栏。刚开始图为这样


然后我在activity 重写了菜单栏的代码

 @Override    public boolean onCreateOptionsMenu(Menu menu) {        Log.e("MainActivity","onCreateOptionsMenu");        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return super.onCreateOptionsMenu(menu);    }
<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    xmlns:app="http://schemas.android.com/apk/res-auto"    tools:context=".DemoActivity">    <item android:id="@+id/action_material"        android:title="Material"        android:orderInCategory="100"        app:showAsAction="never"  />    <item android:id="@+id/action_circles"        android:title="Circles"        android:orderInCategory="100"        app:showAsAction="never"  />    <item android:id="@+id/action_water_drop"        android:title="WaterDrop"        android:orderInCategory="100"        app:showAsAction="never"   />    <item android:id="@+id/action_ring"        android:title="Ring"        android:orderInCategory="100"        app:showAsAction="never"  /></menu>
然后就显示了 右边的菜单栏 ,如图

大功告成。


拓展 :重写了三个方法 :onCreateOptionsMenu,onPrepareOptionsMenu,onOptionsMenuClosed

 @Override    public boolean onCreateOptionsMenu(Menu menu) {        Log.e("MainActivity","onCreateOptionsMenu");        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_main, menu);        return super.onCreateOptionsMenu(menu);    }

 @Override    public boolean onPrepareOptionsMenu(Menu menu) {        Log.e("MainActivity","onPrepareOptionsMenu");              return super.onPrepareOptionsMenu(menu);    }

 @Override    public void onOptionsMenuClosed(Menu menu) {        Log.e("MainActivity","onOptionsMenuClosed");             super.onOptionsMenuClosed(menu);    }

执行以后 得到

由此可见,代码的执行顺序是按以上顺序执行的。那么这三个方法有什么用?


onCreateOptionsMenu 这个方法,返回值必须是true才会有右上角的选项菜单栏。返回false 则没有。

onPrepareOptionsMenu 这个方法,是在onCreateOptionsMenu被调用以后执行,而且每次点击右上角的那个按钮,就会调用一次。如果返回true,才有菜单栏。也就是要这两方法同时返回true才能有菜单栏。

onOptionsMenuClosed 这方法,没什么用,不管怎么点都没有效果,不太清楚。源码写的是"每次菜单被关闭时调用. (菜单被关闭有三种情形,menu按钮被再次点击、back按钮被点击或者用户选择了某一个菜单项" 但是我没发现有这个效果



原创粉丝点击