Android开发手记(12) Menu的使用
Android中的Menu分为三种,分别为:OptionsMenu(选项菜单)、ContextMenu(上下文菜单)、SubMenu(子菜单)。
1、OptionsMenu
//menu.add(groupId, itemId, order, title); 通过add()增加menuItem,每个menuItem有groupId,itemId,Order。这三个属性是相互独立,没有关联。
MenuItem redMenu = menu.add(MENU_GROUP_1, 0, 0, "Red");
MenuItem OrangedMenu = menu.add(MENU_GROUP_1, 1, 1, "Orange");
MenuItem YellowMenu = menu.add(MENU_GROUP_2, 2, 2, "Yellow");
MenuItem GreenMenu = menu.add(MENU_GROUP_2, 3, 3, "Green");
MenuItem BlueMenu = menu.add(MENU_GROUP_2, 4, 4, "Blue");
MenuItem CyangonMenu = menu.add(MENU_GROUP_3, 5, 5, "Cyangon");
MenuItem PurpleMenu = menu.add(MENU_GROUP_3, 6, 6, "Purple");
menu.setGroupCheckable(MENU_GROUP_2, true /*isCheckable*/, false);//第三个参数true为单选,false为多选
menu.setGroupEnabled(MENU_GROUP_2, true/*isEnabled*/);
menu.setGroupVisible(MENU_GROUP_2, true/*isVisible*/);
menu.setGroupCheckable(MENU_GROUP_3, true, true);
完整代码如下:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast; public class MainActivity extends AppCompatActivity { private static int MENU_GROUP_1 = 1;
private static int MENU_GROUP_2 = 2;
private static int MENU_GROUP_3 = 3; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem redMenu = menu.add(MENU_GROUP_1, 0, 0, "Red");
MenuItem OrangedMenu = menu.add(MENU_GROUP_1, 1, 1, "Orange");
MenuItem YellowMenu = menu.add(MENU_GROUP_2, 2, 2, "Yellow");
MenuItem GreenMenu = menu.add(MENU_GROUP_2, 3, 3, "Green");
MenuItem BlueMenu = menu.add(MENU_GROUP_2, 4, 4, "Blue");
MenuItem CyangonMenu = menu.add(MENU_GROUP_3, 5, 5, "Cyangon");
MenuItem PurpleMenu = menu.add(MENU_GROUP_3, 6, 6, "Purple"); menu.setGroupCheckable(MENU_GROUP_2, true /*isCheckable*/, false);//第三个参数true为单选,false为多选
menu.setGroupEnabled(MENU_GROUP_2, true/*isEnabled*/);
menu.setGroupVisible(MENU_GROUP_2, true/*isVisible*/);
menu.setGroupCheckable(MENU_GROUP_3, true, true); return super.onCreateOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "Red", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "Orange", Toast.LENGTH_SHORT).show();
break;
case 2:
if(item.isCheckable()){
item.setChecked(!item.isChecked());
}
break;
case 3:
if(item.isCheckable()){
item.setChecked(!item.isChecked());
}
break;
case 4:
if(item.isCheckable()){
item.setChecked(!item.isChecked());
}
break;
case 5:
if(item.isCheckable()){
item.setChecked(true);
}
break;
case 6:
if(item.isCheckable()){
item.setChecked(true);
}
break;
}
return true;
} }
MainActivity.java
![]() |
![]() |
2、ContextMenu
要在相应的view上按几秒后才显示的,用于view,跟某个具体的view绑定在一起。这类型的菜单不支持icon和快捷键!
在Activity里面,一般通过以下函数来使用context menu:
menu.setHeaderTitle("ContextMenu");
menu.add(GROUP_COLOR, 0, 0, "Red");
menu.add(GROUP_COLOR, 1, 1, "Green");
menu.add(GROUP_COLOR, 2, 2, "Blue");
菜单响应事件处理和OptionMenu类似。
public class MainActivity extends AppCompatActivity {
private TextView colorText;
private static int GROUP_COLOR = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
colorText = (TextView) findViewById(R.id.textView);
registerForContextMenu(colorText);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("ContextMenu");
menu.add(GROUP_COLOR, 0, 0, "Red");
menu.add(GROUP_COLOR, 1, 1, "Green");
menu.add(GROUP_COLOR, 2, 2, "Blue");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);
switch (item.getItemId()) {
case 0:
colorText.setTextColor(Color.RED);
break;
case 1:
colorText.setTextColor(Color.GREEN);
break;
case 2:
colorText.setTextColor( Color.BLUE);
break;
}
return true;
}
}
3、SubMenu
SubMenu可以和OptionMenu、ContextMenu配合使用,但子菜单不能嵌套子菜单,这意味着在Android系统,菜单只有两层。同时子菜单不支持icon。
可以在onCreateOptionMenu或者onCreateContextMenu内定义SubMenu:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("ContextMenu");
menu.add(GROUP_COLOR, 0, 0, "Red");
menu.add(GROUP_COLOR, 1, 1, "Green");
menu.add(GROUP_COLOR, 2, 2, "Blue"); SubMenu subMenu = menu.addSubMenu(Menu.NONE, 10, 10, "Text Size");
subMenu.add(Menu.NONE, 11, 11, "Large");
subMenu.add(Menu.NONE, 12, 12, "Small");
}
完整代码:
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView colorText;
private static int GROUP_COLOR = 1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); colorText = (TextView) findViewById(R.id.textView);
registerForContextMenu(colorText);
} @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle("ContextMenu");
menu.add(GROUP_COLOR, 0, 0, "Red");
menu.add(GROUP_COLOR, 1, 1, "Green");
menu.add(GROUP_COLOR, 2, 2, "Blue"); SubMenu subMenu = menu.addSubMenu(Menu.NONE, 10, 10, "Text Size");
subMenu.add(Menu.NONE, 11, 11, "Large");
subMenu.add(Menu.NONE, 12, 12, "Small");
} @Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item); switch (item.getItemId()) {
case 0:
colorText.setTextColor(Color.RED);
break;
case 1:
colorText.setTextColor(Color.GREEN);
break;
case 2:
colorText.setTextColor( Color.BLUE);
break;
case 11:
colorText.setTextSize(30);
break;
case 12:
colorText.setTextSize(20);
break;
}
return true;
} }
MainActivity.java
4、XML定义菜单
首先在/res/menu新建一个menu_main.xml,在其中定义相关Menu
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
<item android:id="@+id/subMenu"
android:title="SubMenu" >
<menu> <!--定义子菜单-->
<item android:id="@+id/subLarge"
android:title="Large"/>
<item android:id="@+id/subSmall"
android:title="Small"/>
</menu>
</item>
<!--定义菜单组1-->
<group android:id="@+id/group1"
android:checkableBehavior="single"
android:enabled="true">
<item android:id="@+id/redMenu"
android:title="Red"/>
<item android:id="@+id/blueMenu"
android:title="Blue"/>
</group>
<!--定义菜单组2-->
<group android:id="@+id/group2"
android:checkableBehavior="all"
android:enabled="true">
<item android:id="@+id/greenMenu"
android:title="Green"/>
<item android:id="@+id/purpleMenu"
android:title="Purple"/>
</group>
</menu>
(1)XML定义OptionsMenu
重载onCreateOptionsMenu即可:
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater menuInflater = new MenuInflater(getApplication());
menuInflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
完整代码为:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView colorText; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} @Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater menuInflater = new MenuInflater(getApplication());
menuInflater.inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
} }
MainActivity.java
(2)XML定义ContextMenu
首先为ContextMenu注册菜单项
colorText = (TextView)findViewById(R.id.textView);
registerForContextMenu(colorText);
然后重载onCreateContextMenu即可:
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.menu_main, menu);
}
完整代码为:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.View;
import android.widget.TextView; public class MainActivity extends AppCompatActivity { private TextView colorText; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); colorText = (TextView)findViewById(R.id.textView);
registerForContextMenu(colorText);
} @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); getMenuInflater().inflate(R.menu.menu_main, menu);
} }
MainActivity.java
Android开发手记(12) Menu的使用的更多相关文章
- Android 开发手记一NDK编程实例
在Android上,应用程序的开发,大部分基于Java语言来实现.要使用c或是c++的程序或库,就需要使用NDK来实现.NDK是Native Development Kit的简称.它是一个工具集,集成 ...
- Android开发手记(28) Handler和Looper
Android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个Message Queue(消息队列),但是MQ被封装到Looper里面了,我们不会直接与MQ打交道.平 ...
- Android开发手记(24) Log的使用及颜色的更改
在程序开发过程中,LOG是广泛使用的用来记录程序执行过程的机制,它既可以用于程序调试,也可以用于产品运营中的事件记录.在Android系统中,提供了简单.便利的LOG机制,开发人员可以方便地使用.本文 ...
- Android开发手记(7) 按钮类控件的使用
1.点击Button改变页面背景色 通过Button改变页面背景色,首先新建相应的对象,让后绑定到Layout上的元素. final RelativeLayout layout = (Relative ...
- [Android开发常见问题-12] Android开发中debug.keystore如何使用。
有些团度在开发较大的项目的时候会用到debug.keystore这种debug签名,那么这个东西怎么用呢?之前在导出签名包的时候只需要android tools -> export signed ...
- Android开发中的menu菜单
复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...
- Android开发手记(22) 传感器的使用
Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...
- Android开发手记(18) 数据存储三 SQLite存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 SQLite 是以嵌入式为目的 ...
- Android开发手记(17) 数据存储二 文件存储数据
Android为数据存储提供了五种方式: 1.SharedPreferences 2.文件存储 3.SQLite数据库 4.ContentProvider 5.网络存储 本文主要介绍如何使用文件来存储 ...
随机推荐
- python之sys模块
38.python的sys模块: 用于提供对Python解释器相关的操作: 1 2 3 4 5 6 7 8 9 sys.argv 命令行参数List,第一个元素是程序本身路径 sy ...
- twisted(1)--何为异步
早就想写一篇文章,整体介绍python的2个异步库,twisted和tornado.我们在开发python的tcpserver时候,通常只会用3个库,twisted.tornado和gevent,其中 ...
- 2014 青年歌手大赛 AC
青年歌手大奖赛_评委会打分 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- ZedGraph控件生成饼图、拆线图和柱状图例程
这几天做了个自己觉得还蛮NB的功能,在GRID中选中一块数据,然后右键菜单即可生成三种图形,还可以互相切换,对了,饼图还添加了鼠标点击分离的处理,大致如图: 用的控件就是ZedGraph,我把它继承封 ...
- 7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 使用binay log 基于时间点恢复
7.5 Point-in-Time (Incremental) Recovery Using the Binary Log 使用binay log 基于时间点恢复 7.5.1 Point-in-Tim ...
- dnat,snat
Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象. 以下命令将客户端访问1.,很多人 ...
- -_-#ueditor编辑器chrome浏览器下只能复制最后一行
被过滤掉了
- 【转】Eclipse导入library的时候报:Found 2 versions of android-support-v4.jar in the dependency list
原文网址:http://www.07net01.com/2015/03/779691.html 错误类型:Eclipse导入library的时候报:Found 2 versions of androi ...
- 深入JS系列学习4
深入JS系列学习4 Javascript 装载和执行 明白了JS的装载和执行,没有给出很好的解决方案,在IE下可用defer属性: 浏览器对于Javascript的运行有两大特性:1)载入后马上执行, ...
- DHTML【6】--CSS
从今天开始,我们迎来了一个新的面孔---CSS,二者这也是一个漂亮的面孔,为什么说这是一个漂亮的面孔呢?因为CSS是做特效的,可以美化HTML页面,我们看到淘宝网.网易首页等网站都非常好看,那都是一些 ...

