Android菜单详解——子菜单(SubMenu)
2015-11-05 17:45
681 查看
1,子菜单就是将功能相同或相似的分组进行多级显示的一种菜单。
2,创建子菜单的步骤:
a) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
b) 调用SubMenu的add()方法,添加子菜单
c) 覆盖onContextItemSelected()方法,响应子菜单的单击事件
3,使用代码动态添加SubMenu子菜单:
package com.example.submenu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
*设置menu子菜单显示的内容
*/
@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);
//通过addSubMenu方法添加两个子菜单
SubMenu file=menu.addSubMenu("文件");
SubMenu edit=menu.addSubMenu("编辑");
//设置file子菜单中的内容(设置GroupId为1)
file.add(1, 1, 1, "新建");
file.add(1, 2, 1, "打开");
file.add(1, 2, 1, "保存");
file.setHeaderTitle("文件操作"); //设置子菜单的标题
file.setHeaderIcon(R.drawable.ic_launcher); //设置标题旁的图片
//设置edit子菜单中的内容(设置GroupId为2)
edit.add(2, 1, 1, "复制");
edit.add(2, 2, 1, "粘贴");
edit.add(2, 3, 1, "剪切");
edit.setHeaderTitle("编辑操作");
edit.setHeaderIcon(R.drawable.ic_launcher);
return true;
}
/*
* 设置菜单项的点击事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 通过GroupId来判断是哪一个子菜单
if (item.getGroupId()==1) {
//通过ItemId来判断选中的是子菜单中的哪一项
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
}
}else if(item.getGroupId()==2){
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
}
}
return super.onOptionsItemSelected(item);
}
}
4,使用XML添加SubMenu子菜单(在res的menu中编写代码):
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:showAsAction="never"
android:title="文件">
<menu>
<item
android:id="@+id/new_file"
android:showAsAction="never"
android:title="新建"/>
<item
android:id="@+id/open_file"
android:showAsAction="never"
android:title="打开"/>
<item
android:id="@+id/save_file"
android:showAsAction="never"
android:title="保存"/>
</menu>
</item>
<item
android:showAsAction="never"
android:title="编辑">
<menu>
<item
android:id="@+id/c_edit"
android:showAsAction="never"
android:title="复制"/>
<item
android:id="@+id/v_edit"
android:showAsAction="never"
android:title="粘贴"/>
<item
android:id="@+id/x_edit"
android:showAsAction="never"
android:title="剪切"/>
</menu>
</item>
</menu>
5,使用XML添加SubMenu子菜单时MainActivity中的代码:
package com.example.submenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
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 void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
//super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()){
case R.id.new_file:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case R.id.open_file:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case R.id.save_file:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
case R.id.c_edit:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case R.id.v_edit:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case R.id.x_edit:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
6,实现效果:
点击子菜单项后的效果,例如点击“文件”:
2,创建子菜单的步骤:
a) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单
b) 调用SubMenu的add()方法,添加子菜单
c) 覆盖onContextItemSelected()方法,响应子菜单的单击事件
3,使用代码动态添加SubMenu子菜单:
package com.example.submenu;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*
*设置menu子菜单显示的内容
*/
@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);
//通过addSubMenu方法添加两个子菜单
SubMenu file=menu.addSubMenu("文件");
SubMenu edit=menu.addSubMenu("编辑");
//设置file子菜单中的内容(设置GroupId为1)
file.add(1, 1, 1, "新建");
file.add(1, 2, 1, "打开");
file.add(1, 2, 1, "保存");
file.setHeaderTitle("文件操作"); //设置子菜单的标题
file.setHeaderIcon(R.drawable.ic_launcher); //设置标题旁的图片
//设置edit子菜单中的内容(设置GroupId为2)
edit.add(2, 1, 1, "复制");
edit.add(2, 2, 1, "粘贴");
edit.add(2, 3, 1, "剪切");
edit.setHeaderTitle("编辑操作");
edit.setHeaderIcon(R.drawable.ic_launcher);
return true;
}
/*
* 设置菜单项的点击事件
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 通过GroupId来判断是哪一个子菜单
if (item.getGroupId()==1) {
//通过ItemId来判断选中的是子菜单中的哪一项
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
}
}else if(item.getGroupId()==2){
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
}
}
return super.onOptionsItemSelected(item);
}
}
4,使用XML添加SubMenu子菜单(在res的menu中编写代码):
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:showAsAction="never"
android:title="文件">
<menu>
<item
android:id="@+id/new_file"
android:showAsAction="never"
android:title="新建"/>
<item
android:id="@+id/open_file"
android:showAsAction="never"
android:title="打开"/>
<item
android:id="@+id/save_file"
android:showAsAction="never"
android:title="保存"/>
</menu>
</item>
<item
android:showAsAction="never"
android:title="编辑">
<menu>
<item
android:id="@+id/c_edit"
android:showAsAction="never"
android:title="复制"/>
<item
android:id="@+id/v_edit"
android:showAsAction="never"
android:title="粘贴"/>
<item
android:id="@+id/x_edit"
android:showAsAction="never"
android:title="剪切"/>
</menu>
</item>
</menu>
5,使用XML添加SubMenu子菜单时MainActivity中的代码:
package com.example.submenu;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
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 void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
//super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.main, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()){
case R.id.new_file:
Toast.makeText(this, "点击了新建", Toast.LENGTH_SHORT).show();
break;
case R.id.open_file:
Toast.makeText(this, "点击了打开", Toast.LENGTH_SHORT).show();
break;
case R.id.save_file:
Toast.makeText(this, "点击了保存", Toast.LENGTH_SHORT).show();
break;
case R.id.c_edit:
Toast.makeText(this, "点击了复制", Toast.LENGTH_SHORT).show();
break;
case R.id.v_edit:
Toast.makeText(this, "点击了粘贴", Toast.LENGTH_SHORT).show();
break;
case R.id.x_edit:
Toast.makeText(this, "点击了剪切", Toast.LENGTH_SHORT).show();
break;
}
return super.onOptionsItemSelected(item);
}
}
6,实现效果:
点击子菜单项后的效果,例如点击“文件”:
相关文章推荐
- Android-05 Android的MVC设计框架浅析
- Android中SQLite应用详解
- Android下拉刷新ListView设计
- 【Android】近日问题小计
- Android编程判断横屏、竖屏及设置横竖屏的方法
- Android是如何改变了嵌入式格局
- Android菜单详解(四)——使用上下文菜单ContextMenu
- 【Android学习之道】 四大组件之ContentProvider内容提供器
- AsyncTask的执行流程及其细节点
- 综述种类:Android组件之间 数据传递方法
- 在我工作中,我想让RelativeLayout设置按钮的效果,但是有时候没有效果,下面的方法可以解决问题
- Android使用Glide加载Gif.解决Glide加载Gif非常慢问题
- Android Studio 文件类型图标
- 关于android广播优先级的理解
- 自定义倒计时按钮
- android 通知栏
- Android中用textview展示doc文档保存格式
- 倒计时按钮
- Android开发&Dialog
- Android-onInterceptTouchEvent()和onTouchEvent()总结