android中menu可能需要重写的方法是哪些

作者&投稿:勾烟 (若有异议请与网页底部的电邮联系)
Android Activity中重写onCreateOptionsMenu不显示菜单按钮~

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)如果OptionsMenu不显示建议按一步方式了解

OptionsMenu 
 一、概述
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):单打开后发生的动作。
二、默认样式
  默认样式是在屏幕底部弹出一个菜单,这个菜单我们就叫他选项菜单OptionsMenu,一般情况下,选项菜单最多显示2排每排3个菜单项,这些菜单项有文字有图标,也被称作Icon Menus,如果多于6项,从第六项开始会被隐藏,在第六项会出现一个More里,点击More才出现第六项以及以后的菜单项,这些菜单项也被称作Expanded Menus。下面介绍。
1.main.xml


 2。重载onCreateOptionsMenu(Menu menu)方法
  重载onCreateOptionsMenu(Menu menu)方法,并在此方法中添加菜单项,最后返回true,如果false,菜单则不会显示。
public boolean onCreateOptionsMenu(Menu menu)@Override public boolean onCreateOptionsMenu(Menu menu) { /* * * add()方法的四个参数,依次是: * * 1、组别,如果不分组的话就写Menu.NONE * * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * * 4、文本,菜单的显示文本 */ menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon( android.R.drawable.ic_menu_delete); // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以 // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的 menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon( android.R.drawable.ic_menu_edit); menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon( android.R.drawable.ic_menu_help); menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon( android.R.drawable.ic_menu_add); menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon( android.R.drawable.ic_menu_info_details); menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon( android.R.drawable.ic_menu_send); return true; }
3。为菜单项注册事件
  使用onOptionsItemSelected(MenuItem item)方法为菜单项注册事件
public boolean onOptionsItemSelected(MenuItem item)@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 2: Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 3: Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 4: Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 5: Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 6: Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show(); break; } return false; }
4.完整代码
package com.android.menu;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;public class DefaultMenu extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onCreateOptionsMenu(Menu menu) { /* * * add()方法的四个参数,依次是: * * 1、组别,如果不分组的话就写Menu.NONE, * * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单 * * 3、顺序,那个菜单现在在前面由这个参数的大小决定 * * 4、文本,菜单的显示文本 */ menu.add(Menu.NONE, Menu.FIRST + 1, 5, "删除").setIcon( android.R.drawable.ic_menu_delete); // setIcon()方法为菜单设置图标,这里使用的是系统自带的图标,同学们留意一下,以 // android.R开头的资源是系统提供的,我们自己提供的资源是以R开头的 menu.add(Menu.NONE, Menu.FIRST + 2, 2, "保存").setIcon( android.R.drawable.ic_menu_edit); menu.add(Menu.NONE, Menu.FIRST + 3, 6, "帮助").setIcon( android.R.drawable.ic_menu_help); menu.add(Menu.NONE, Menu.FIRST + 4, 1, "添加").setIcon( android.R.drawable.ic_menu_add); menu.add(Menu.NONE, Menu.FIRST + 5, 4, "详细").setIcon( android.R.drawable.ic_menu_info_details); menu.add(Menu.NONE, Menu.FIRST + 6, 3, "发送").setIcon( android.R.drawable.ic_menu_send); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 2: Toast.makeText(this, "保存菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 3: Toast.makeText(this, "帮助菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 4: Toast.makeText(this, "添加菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 5: Toast.makeText(this, "详细菜单被点击了", Toast.LENGTH_LONG).show(); break; case Menu.FIRST + 6: Toast.makeText(this, "发送菜单被点击了", Toast.LENGTH_LONG).show(); break; } return false; } @Override public void onOptionsMenuClosed(Menu menu) { Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show(); } @Override public boolean onPrepareOptionsMenu(Menu menu) { Toast.makeText(this, "选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单", Toast.LENGTH_LONG).show(); // 如果返回false,此方法就把用户点击menu的动作给消费了,onCreateOptionsMenu方法将不会被调用 return true; }}
5.运行效果

SlidingMenu在GitHub中可以被找到,下面是GitHub源码的地址,大家可以点进去,下载这个源码。另外,SlidingMenu这个开源组件也是基于另外一个开源组件之上的,这个开源组件是ActionBarSherlock,也需要下载下来。

可能需要重写的如下:
public boolean onCreateOptionsMenu(Menu menu)方法只被系统调用一次,如需要动态更改菜单内容还需重写onPrepareOptionsMenu(Menu menu)方法实现

[java] view plain copy
Menu m=null;
int count=0;

@Override
public boolean onPrepareOptionsMenu(Menu menu) {

if(count>0){
if(count%2==0){
menu.removeGroup(1);
}else{
menu.add(1, Menu.FIRST, 0, "5st");
menu.add(1, Menu.FIRST+1, 0, "6st");
}
}
count++;
return super.onPrepareOptionsMenu(menu);
}

2,context menu(长按屏幕产生)

[java] view plain copy
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "you select"+item.getItemId(), 500).show();
break;
case 2:
Toast.makeText(this, "you select"+item.getItemId(), 500).show();
break;
}
return super.onContextItemSelected(item);
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, Menu.FIRST, 0, "1st");
menu.add(0, Menu.FIRST+1, 0, "2st");
super.onCreateContextMenu(menu, v, menuInfo);
}


android中报错AndroidRuntimeException:This message is already in u...
该对象通过sendMessage()被发送,然后在handleMessage()中得到处理,而此时你的循环仍在运行,又对该对象进行赋值。导致的结果是两个线程可能同时处理一个对象,就出错了。而放在while里面的话,每次循环开始,都重新创建了一个message对象,你是针对不同对象进行操作的,故没有问题了。

Android界面编辑开发中的activity_main.xml中“@+id\/username”与"@id\/...
Android 中的组件需要用一个 int 类型的值来表示,这个值也就是组件标签中的 id 属性值。id 属性只能接受资源类型的值,也就是必须以 开头的值,例如,id\/abc 、+id\/xyz 等。如果在 后面使用 “+”,表示当修改完某个布局文件并保存后,系统会自动在 R.java 文件中生成相应的 int 类型变量。...

android中的对话框怎么写
Dialog dialog = new AlertDialog.Builder(this).setIcon( android.R.drawable.btn_star).setTitle("喜好调查").setMessage( "你喜欢李连杰的电影吗?").setPositiveButton("很喜欢", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ...

android中在怎么获取数据库数据
"uid"));String uname=cursor.getString(cursor.getColumnIndex("uname"));String uaddress=cursor.getString(cursor.getColumnIndex("uaddress"));User user=new User();user.setUid(uid2);user.setUname(uname);user.setUaddress(uaddress);return user;} cursor.close();return null;} ...

android开发中跨进程通信有几种方式
第一:Android应用中使用多进程只有一个办法(用NDK的fork来做除外),就是在AndroidManifest.xml中声明组件时,用android:process属性来指定。不知定process属性,则默认运行在主进程中,主进程名字为包名。android:process = package:remote,将运行在package:remote进程中,属于全局进程,其他具有相同share...

android 后台怎么向ui主线程中发送消息
4、View.PostDelayed(Runnabe,long)5、AsyncTask 方法一:handler handler是android中专门用来在线程之间传递信息类的工具。要讲明handler的用法非常简单,但是我在这里会少许深入的讲一下handler的运行机制。为了能够让handler在线程间传递消息,我们还需要用到几个类。他们是looper,messageQueue,message。这里...

android中人脸识别扫描人然后怎样将影象储存到本地资料库
android中人脸识别扫描人然后怎样将影象储存到本地资料库 用AndroidSDK中的Face Detector实现人脸识别 流程是这样的:1. 读取一张图片至Bitmap (从Resource中,或是从手机相簿中选取)2. 使用FaceDetector API分析Bitmap,将探测到的人脸资料以FaceDetector.Face储存在一个Face list中;3.将人脸框显示...

android handlemessage的返回值有什么用
Handler.Callback 有优先处理消息的权利 ,当一条消息被 Callback 处理并拦截(返回 true),那么 Handler 的 handleMessage(msg) 方法就不会被调用了;如果 Callback 处理了消息,但是并没有拦截,那么就意味着一个消息可以同时被 Callback 以及 Handler 处理 ...

在android中写了一个menu,但是点击之后没有反应,求教了!
onOptionsItemMenu这个函数里面的case语句有错,下面是我下的一段代码,你看一下,应该知道你那个是什么错误了。public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()) { case 1:sign = 1;provinces=new String[]{"工具","关于","退出"};showSingleChoiceDialog();retu...

Android中手机屏幕密度该怎么计算
以上的描述就是一个蓝本(此蓝本对应于mdpi). 按照此蓝本一个dp相当于160dpi屏幕中的一个px.同理在,在320dpi的屏幕中,一个dp相当于2个px. 通过这样的成比例放缩,Android解决了需要多个不同屏幕中的大小显示问题. 所以在Eclipse的布局文件中,以3.7in WVGA(Nexus One)(480x800)为例,可以看...

通州市15633255562: Android Context Menu和Options Menu菜单的区别 -
杨阎安博: 1. Context Menu – 显示一个Activity中特定View的信息.在Android中,通过按下并Hold一段时间来激活上下文菜单.Context Menu需要重写onCreateContextMenu()和onContextItemSelected()方法.在创建ContextMenu是调用...

通州市15633255562: android中OptionsMenu(包括点击more展开的部分)字体颜色之类的如何设置? -
杨阎安博: 你可以把你想要的字体及颜色做成图片,然后添加成它icon 的背景图,这样也可以实现改变字体颜色的效果! 这样可以实现吧,因为没有直接修改的方法吧!如果找到的话,希望你分享下!

通州市15633255562: android中menu怎么写 -
杨阎安博: 菜单资源文件必须放在res/menu目录中.菜单资源文件必须使用<menu>标签作为根节点.除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>. <menu>标签没有任何属性,但可以嵌套在<item>标签...

通州市15633255562: android怎么创建菜单 -
杨阎安博: 亲,你只建了菜单,未设置点击菜单后怎么做.如下面一个例子:import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;...

通州市15633255562: Android中menu菜单中的图片是怎么加进去的? -
杨阎安博: 通过代码加进去,也可以通过xml加加入图片.public boolean onCreateOptionsMenu(Menu menu){menu.add(0, CLASSIC_MENU_REFRESH, 0, R.string.menu_refresh).setIcon(R.drawable.cmcc_toolbar_refresh);return super....

通州市15633255562: android继承activity为什么要重写onCreateOptionsMenu,以前的版本是不用重写的 -
杨阎安博: 可以不用管,是adt-20开始有的.这个就是在该界面增加了menu 功能,你在该界面按下menu按键,有弹出menu选项框.

通州市15633255562: android点击“menu”总是报错Window already focused, ignoring focus gain of求解~ -
杨阎安博: 你的下载方法是怎么实现的?如果是等到网络返回会阻塞UI,这样做在实际中是绝对不行的 感觉可能是你的下载方法有问题,一般要把下载方法放在一个线程里面去做,然后用hander接收,具体你可以去看看android里面的 Handler机制

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网