6 使用OptionsMenu实现选项菜单
6-1 创建菜单 (05:52)
点击菜单按钮弹出菜单,菜单里面有菜单项,给菜单项添加点击按钮
OptionsMenu
创建选项菜单:onCreateOptionsMenu()
---设置菜单项可用代码动态设置menuAdd();
---还可以通过xml设置MenuInflate.inflate();
设置菜单项点击事件:onOptionsItemSelected()
xml显示菜单:
1.创建menu的xml文件
2.在onCreateOptionsMenu方法里通过getMenuInflater().inflater(R.menu.main,menu);
加载res->menu->main.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_menu_item1" android:orderInCategory="100" android:showAsAction="never" android:title="菜单一"/> <item android:id="@+id/action_menu_item2" android:orderInCategory="100" android:showAsAction="never" android:title="菜单二"/> </menu>
6-2 监听菜单列表点击事件 (03:33)
静态:
Main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_menu_item1" android:orderInCategory="100" android:showAsAction="never" android:title="菜单一"/> <item android:id="@+id/action_menu_item2" android:orderInCategory="100" android:showAsAction="never" android:title="菜单二"/> </menu>
MainActivity.java
package com.imooc.optionmenudemo; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override // 实现对菜单选型中的每一条记录的点击事件也是这个Activity中的事件的处理: // 对当前activity的菜单项中的选项的点击事件的监听 public boolean onOptionsItemSelected(MenuItem item) { // 重写选项菜单点击方法 switch (item.getItemId()) { case R.id.action_menu_item1: Toast.makeText(this, "点击了" + item, Toast.LENGTH_SHORT).show(); break; case R.id.action_menu_item2: Toast.makeText(this, "点击了" + item, Toast.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); } }
6-3 动态添加菜单项 (11:13)
动态(且点击菜单项跳转;另一个界面):
SecondActivity.java
package com.imooc.optionmenudemo; import android.app.Activity; import android.os.Bundle; public class SecondActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_layout); } }
activity_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是第二个界面" /> </LinearLayout>
MainActivity.java
package com.imooc.optionmenudemo; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. // getMenuInflater().inflate(R.menu.main, menu); MenuItem item = menu.add(1, 100, 1, "菜单一"); item.setTitle("aaa"); item.setIcon(R.drawable.ic_launcher);// api>=11 不显示图标 , menu.add(1, 101, 1, "菜单二"); menu.add(1, 102, 1, "菜单三"); menu.add(1, 103, 1, "菜单四"); menu.add(1, 104, 1, "菜单五"); menu.add(1, 105, 1, "菜单六"); menu.add(1, 106, 1, "菜单七"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 100: Intent intent = new Intent(MainActivity.this, SecondActivity.class); item.setIntent(intent); break; case 101: Toast.makeText(MainActivity.this, "点击了菜单二", Toast.LENGTH_SHORT) .show(); break; case 102: Toast.makeText(MainActivity.this, "点击了菜单三", Toast.LENGTH_SHORT) .show(); break; case 103: Toast.makeText(MainActivity.this, "点击了菜单四", Toast.LENGTH_SHORT) .show(); break; case 104: Toast.makeText(MainActivity.this, "点击了菜单五", Toast.LENGTH_SHORT) .show(); break; case 105: Toast.makeText(MainActivity.this, "点击了菜单六", Toast.LENGTH_SHORT) .show(); break; case 106: Toast.makeText(MainActivity.this, "点击了菜单七", Toast.LENGTH_SHORT) .show(); break; } return super.onOptionsItemSelected(item); } }
创建菜单项:
第一步:在Activity中重写onCreateOptionsMenu()来创建选项菜单,在中包含了getMenuInflater().inflate(R.menu.main,menu),R.menu.main是res的menu文件夹下的xml文件是放菜单的文件夹;设置菜单项可以通过两种方法: 一:代码动态设置menu.add(groupId,itemId,order,title),
groupId--1:分组的id;
itemId--100:菜单项的id;
order--1:菜单项排序用的;
title--"菜单1":菜单名称;
类似于ArrayList,可以调用add方法来加载如
menu.add(1,100,1,"菜单一");
menu.add(1,101,1,"菜单二");
menu.add(1,102,1,"菜单三");
add方法返回的是item,可以赋值给item,再调用item的setTitle与setIcon(在API>=11时,是不显示图标的)来设置item;
二:在R.menu.main的xml文件,添加item控件来添加设置菜单项;
第二步:重写onOptionsItemSelected(MenuItem item)方法设置菜单项的点击事件,再switch(item.getItemId())来设置各个case,方法1的id是add中itemId,方法二的id是xml文件中定义的id的点击事件;
第三步:创建Activity,关联xml文件,并在manifest中加上activity。在case中,新建intent,调用item的setIntent(intent)实现界面跳转;
新建activity时需要再mainfast中配置