•前行必备——创建 menu
首先,新建一个项目,选择 Empty Activity 选项,并命名为 Test Menu;
这样 Android Studio 自动为我们新建 MainActivity.java 和 activity_main.xml 文件;
进入 Test Menu 项目,将模式结构换成 Project 模式;
然后找到 app/scr/main/ 下的 res 文件夹;
有两种方式可以创建一个 menu;
方法一
如果创建一个新的项目,在 res 文件夹下默认没有 menu 这个文件夹;
我们的首要任务是新建一个 menu 文件夹,右击 res->New->Directory;
创建好 menu 文件夹后,右击menu->New->Menu resource file;
文件名输入 main,点击 OK 完成创建;
方法二
右击res->New->Android Resource File;
来到如下所示界面;
•渐入佳境——了解Menu
我们可以使用 <menu>、<item>、<group> 三种XML元素定义 Menu,下面简单介绍一下它们:
<menu>是菜单项的容器
<group>是<item>元素的不可见容器(可选)
其中,<item>是我们主要需要关注的元素,它的常见属性如下:
•步入主题——使用Menu
声明
我从网上下载了四张图片,放置在了 mipmap-hdpi 文件夹下:
依次命名为 icon_one , icon_two , icon_three , icon_four;
main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/option_normal_1" android:icon="@mipmap/icon_one" android:title="普通菜单1" app:showAsAction="ifRoom"/> <item android:id="@+id/option_normal_2" android:icon="@mipmap/icon_two" android:title="普通菜单2" app:showAsAction="always"/> <item android:id="@+id/option_normal_3" android:icon="@mipmap/icon_three" android:title="普通菜单3" app:showAsAction="withText|always"/> <item android:id="@+id/option_normal_4" android:title="普通菜单4" android:icon="@mipmap/icon_four" app:showAsAction="never"/> </menu>同时,每一个<item>都有一个独特的 app:showAsAction 属性。
一般情况下,常驻菜单项以图标形式显示(需要定义 android:icon 属性);
而溢出菜单项则以文字形式显示(通过 android:title 属性定义)。
showAsAction差异
现在我们已经在 XML 文件中将 Menu 定义完毕了,接下来还需要在Java代码中进行加载;
MainActivity.java
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) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main,menu); return true; } }在该代码中重写了 onCreateOptionsMenu(Menu menu) 方法;
重写方法时可以使用 Ctrl+O 快捷键,然后检索 onCreateOptionsMenu:
在该方法中通过 getMenuInflater() 方法得到 MenuInflater 对象;
再调用它的 inflate() 方法就可以给当前活动创建菜单了;
inflate() 方法接受两个参数:
然后给这个方法返回 true,表示允许创建的菜单显示出来,如果返回 false,创建的菜单将无法显示;
运行效果
为 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) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main,menu); return true; } @Override public boolean onoptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.option_normal_1: return true; case R.id.option_normal_2: return true; case R.id.option_normal_3: return true; case R.id.option_normal_4: return true; default: return super.onoptionsItemSelected(item); } } }在 onoptionsItemSelected(MenuItem item) 方法中,我们实现了菜单项的点击监听。
可以看见,这里是通过 MenuItem 的 id 进行区分的,对应着XML文件中<item>的id属性。
每次处理完点击事件后,记得要返回true,对系统而言这次点击事情才算是真正结束了。
此外,在 default 分支下,推荐调用父类的默认实现,即 super.onoptionsItemSelected(item) ;
•声明
有关 Menu 的其他用法,请参考【Android Menu用法全面讲解】;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。