android 代替menu,Android Menu

在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)

一、OptionsMenu

15e5d341009d

Paste_Image.png

1.res/menu下的activity_main.xml文件

菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用

android:id="@+id/menu_settings"

android:orderInCategory="1"

android:icon="@drawable/home"

android:title="@string/menu_settings"/>

android:id="@+id/menu_about"

android:orderInCategory="2"

android:icon="@drawable/mine"

android:title="@string/menu_about"/>

android:id="@+id/menu_quit"

android:orderInCategory="3"

android:icon="@drawable/more"

android:title="@string/menu_quit"/>

2.MainActivity

package com.example.menutest;

import android.os.Bundle;

import android.app.Activity;

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.activity_main, menu);

return true;//返回true表示显示menu

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

switch(item.getItemId()){

case R.id.menu_about:

Toast.makeText(MainActivity.this, ""+"关于", Toast.LENGTH_SHORT).show();

break;

case R.id.menu_settings:

Toast.makeText(MainActivity.this, ""+"设置", Toast.LENGTH_SHORT).show();

break;

case R.id.menu_quit:

Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show();

break;

default:

break;

}

//Toast.makeText(MainActivity.this, ""+item.getItemId(), Toast.LENGTH_SHORT).show();

return super.onOptionsItemSelected(item);

}

}

public boolean onCreateOptionsMenu(Menu menu):

使用此方法调用OptionsMenu

public boolean onOptionsItemSelected(MenuItem item):

选中菜单项后发生的动作

public void onOptionsMenuClosed(Menu menu):

菜单关闭后发生的动作

public boolean onPrepareOptionsMenu(Menu menu):

选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单

public boolean onMenuOpened(int featureId, Menu menu):

单打开后发生的动作。

二、ContextMenu

参考Android菜单详解(四)——使用上下文菜单ContextMenu

在Windows中,我们已经习惯了在文件上单击右键来执行“打开”、“重命名”、“剪切”、“删除”等操作,这个右键弹出的菜单就是上下文菜单。

15e5d341009d

每个文件的操作

上下文菜单与Options Menu最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。

1.注册上下文菜单

/**

* 上下文菜单演示Demo

*

* @author CodingMyWorld 2011-8-27 下午03:22:39

*/

publicclass SampleContextMenuActivity extends ListActivity {

privatestaticfinal String TAG ="SampleContextMenuActivity";

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 显示列表

simpleShowList();

// 为所有列表项注册上下文菜单

this.registerForContextMenu(getListView());

}

privatevoid simpleShowList() {

// list item

String[] files =new String[] {

"文件1",

"文件2",

"文件3",

"文件4"

};

// simple array adapter

ArrayAdapter adapter =new ArrayAdapter(

this,

android.R.layout.simple_list_item_1,

files);

// set adapter

this.setListAdapter(adapter);

Log.v(TAG, "show simple list");

}

}

2.生成上下文菜单

@Override

publicvoid onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

Log.v(TAG, "populate context menu");

// set context menu title

menu.setHeaderTitle("文件操作");

// add context menu item

menu.add(0, 1, Menu.NONE, "发送");

menu.add(0, 2, Menu.NONE, "标记为重要");

menu.add(0, 3, Menu.NONE, "重命名");

menu.add(0, 4, Menu.NONE, "删除");

}

3.响应上下文菜单项

@Override

publicboolean onContextItemSelected(MenuItem item) {

// 得到当前被选中的item信息

AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();

Log.v(TAG, "context item seleted ID="+ menuInfo.id);

switch(item.getItemId()) {

case1:

// do something

break;

case2:

// do something

break;

case3:

// do something

break;

case4:

// do something

break;

default:

return super.onContextItemSelected(item);

}

return true;

}

三、SubMenu

15e5d341009d

Paste_Image.png

15e5d341009d

Paste_Image.png

子菜单提供了一种自然的组织菜单项的方式,它被大量地运用在windows和其他OS的GUI设计中。Android同样支持子菜单,你可以通过addSubMenu(int groupId, int itemId, int order, int titleRes)方法非常方便的创建和响应子菜单。

@Override

publicboolean onCreateOptionsMenu(Menu menu) {

int base = Menu.FIRST;

// 一个menu可以包括多个子菜单

SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "系统设置");

// 子菜单可以包括多个菜单项

MenuItem menuitem1 = subMenu.add(base, base+1, base+1, "显示设置");

subMenu.add(base, base+2, base+2, "网络设置");

subMenu.add(base, base+3, base+3, "高级设置");

subMenu.add(base, base+4, base+4, "安全设置");

// 子菜单项不支持显示图标,这样做是没意义的,尽管不会报错!

menuitem1.setIcon(R.drawable.displaysettings);

//但是子菜单本身是支持图标的

subMenu.setIcon(R.drawable.settings);

// 显示菜单请返回true

return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值