不知道大家在用虚拟机或者实体机的时候有没有发现一个问题,那就是显示菜单的那一栏有时候我们觉得没什么用,而且又丑。

博主学Android的第二天就问了老师,这个东西这么丑,怎么搞死它,或者把它变得漂亮一点。然后老师就告诉我在MainActivity里面删掉onCreateOptionsMenu()方法就行,具体的以后会讲。当时刚刚接触Android,觉得它有一种神秘感,遂没有深究。

  今天我们把菜单actionBar给学了一下,算是弥补了当时的一个缺憾。

三种菜单类型:
1)OptionMenu 通过点击Menu按钮触发
重写onCreateOptionsMenu(),在方法里调用Menu对象的方法添加菜单项或者子菜单
返回true代表显示菜单出来
重写onOptionsItemSelected()为MenuItem单击作出响应事件
返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了
2)ContextMenu 通过LongClick控件触发
重写onCreateContextMenu()创建MenuItem
重写onContextItemSelected为MenuItem作出响应
需要给控件注册上下文菜单:
registerForContextMenu(view);
3)PopupMenu 弹出式菜单
创建PopMenu对象,指定绑定的控件
调用getMenuInflater().inflate(R.menu.xml_menu1,
pop.getMenu())方法加载MenuItem资源
调用show()方法显示PopMenu
调用setOnMenuItemClickListener()为其设置监听
菜单的结构:
Menu 是一个父接口,代表一个菜单,android用它来管理各种菜单项。注意我们一般不自己创建menu,因为每个Activity默认都自带了一个,我们要做的是为它加菜单项和响应菜单项的点击事件。
---SubMenu 子菜单,可以包含1到N个MenuItem
---ContextMenu 上下文菜单,可以包含1到N个MenuItem
---MenuItem 菜单项
创建菜单的两种方式:
1)代码添加
add(groupId,Id,Order,Title)添加普通菜单项
addSubMenu(groupId,Id,Order,Title)添加内容为子菜单的菜单项
groupId 为菜单项设置组编号,一般传0
Id 为菜单项设置自身编号,同组之内不能重复
Order 定菜单项的排列顺序,一般传0
Title 指定文字
注意:通过add(Title)或addSubMenu(Title)
添加的菜单项为默认0组的菜单项
MenuItem还提供如下方法来设置快捷键:
setIcon(int):设置菜单项的图标
2)通过Menu菜单文件添加(推荐使用)





...










中指定的常用属性:
checkableBehavior:指定菜单的选择行为,多选,单选,不可选
menuCategory:对菜单进行分类,指定菜单的优先级
visible:该组菜单是否可见
enable:该组菜单是否可用
中指定的常用属性:
android:id为菜单项指定一个唯一标识
android:title菜单项的标题
android:icon菜单项的图标
android:checkable 菜单项是否可选
android:checked 菜单项是否已被选
android:visible 菜单项是否可见
android:enable 菜单项是否可用
android:numericShortcut 菜单项数字快捷健
android:alphabeticShortcut菜单项字符快捷健

我们继续用一个实例结尾吧!

menu.xml

                                                            

activity_main.xml

    

MainActivity.java

package com.example.actionbar;import android.app.Activity;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.view.ContextMenu.ContextMenuInfo;import android.widget.PopupMenu;import android.widget.PopupMenu.OnMenuItemClickListener;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {private PopupMenu popupMenu;private TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv=(TextView)findViewById(R.id.tv);registerForContextMenu(tv);}/* * 三个小点overFlow */@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);// 添加一个普通菜单项/* * menu.add(0,1,1,"扫一扫"); menu.add(0,2,2,"添加"); * //第一个是组号都是menu第二个是事件监听,第三个是排序 SubMenu subMenu=menu.addSubMenu(0, 3, * 3, "字体颜色"); subMenu.add(0,4,1,"红色"); subMenu.add(0,5,2,"绿色"); * subMenu.add(0,6,3,"蓝色"); */return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.switch (R.menu.main) {case R.id.action_settings:Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show();break;case R.id.item1:Toast.makeText(this, "扫一扫", Toast.LENGTH_SHORT).show();break;case R.id.item2:Toast.makeText(this, "字体颜色", Toast.LENGTH_SHORT).show();break;default:break;}return super.onOptionsItemSelected(item);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// TODO Auto-generated method stubgetMenuInflater().inflate(R.menu.main, menu);super.onCreateContextMenu(menu, v, menuInfo);}public void btn(View view) {// TODO Auto-generated method stubpopupMenu=new PopupMenu(this, view);getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {// TODO Auto-generated method stubswitch (R.menu.main) {case R.id.action_settings:Toast.makeText(MainActivity.this, "setting", Toast.LENGTH_SHORT);break;case R.id.item1:Toast.makeText(MainActivity.this, "扫一扫", Toast.LENGTH_SHORT).show();break;case R.id.item2:Toast.makeText(MainActivity.this, "字体颜色", Toast.LENGTH_SHORT).show();break;default:break;}return true;}});popupMenu.show();}}


更多相关文章

  1. Android(安卓)事件处理(—)(附源码)
  2. android-UI组件实例大全(十六)---菜单Menu
  3. Android(安卓)View的onClick事件监听
  4. Android入门教程(八)之-----简单的Button事件响应综合提示控件To
  5. Android(安卓)RxJava操作符详解系列: 创建操作符
  6. Android:使用MediaPlayer播放本地音乐
  7. Android(安卓)音乐播放器的实现(一)自定义按钮的实现
  8. android EventBus学习记录
  9. android 录音事件

随机推荐

  1. Android开发学习——android与服务器端数
  2. android 打水印
  3. android ksoap2调用.net Webservice 方法
  4. 关于build.gradle的写法
  5. Android Skia和2D图形系统
  6. Android 获取时间戳 和时间戳转日期
  7. android ScreenCapture
  8. Android 之Java动态生成View
  9. Android(安卓)Studio调试技巧(基于Android
  10. Android下常用的正则表达式判断工具类代