android 细节之 menu 之 invalidateOptionsMenu
menu 在 android中是个很经常使用的控件,曾经自己做项目的时候通常都是将系统的menu相关方法在activity中直接删去。而且将主题换为fullscreen,然后再在layout中引入自己画好的新的标题栏。
实际上有更好的方法。
并不须要将系统方法删去。仅仅须要将系统menu加上自己的图片,比如:
<? xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item
android:id="@+id/menu_edit"
android:icon="@drawable/ic_edit"
android:showAsAction="always"
android:title="@string/common_menu_edit"/> </menu>
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_card_details, menu);
tintMenuItems(menu);
return true;
} @Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.menu_edit).setEnabled(mIsCardDetailsLoaded);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_edit:
Intent intent = prepareIntent(EditCardActivity.class, false);
intent.putExtra(IntentExtra.UNIFIED_CARD, mUnifiedCard);
startActivityForResult(intent, Ids.Request.EDIT_PAYMENT_CARD);
return true; default:
return super.onOptionsItemSelected(item);
}
}
3.2执行时改变Menu ItemonCreateOptionsMenu()仅仅有在menu刚被创建时才会执行。因此要想随时动态改变OptionMenu就要实现onPrepareOptionsMenu()方法。该方法会传给你Menu对象,供使用
Android2.3或更低的版本号会在每次Menu打开的时候调用一次onPrepareOptionsMenu().
Android3.0及以上版本号默认menu是打开的。所以必须调用invalidateOptionsMenu()方法,然后系统将调用onPrepareOptionsMenu()运行update操作。
这样就能够实现我们的自己定义菜单。简单方便。
尽管我认为自己在主layout中包裹一个layout用来做标题栏也非常方便,可是近期的实际开发中,前辈们貌似都是用我刚才提到的方法来做菜单,特记之。
android 细节之 menu 之 invalidateOptionsMenu的更多相关文章
- Android Studio —— 创建Menu菜单项
大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件:
- Android ActionBar以及menu的代码设置样式
menu部分xml代码 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android= ...
- Android菜单详解(一)——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
- android 开发-(Contextual Menu)上下文菜单的实现
在android3.0以后,安卓设备不在提供物理的菜单按键,同时,android应用提供了另外的菜单实现机制,来替代之前的菜单创建方式.安卓设备中,平常可以使用长按住某个内容弹出菜单选项.这就是我们需 ...
- Android学习笔记——Menu(一)
背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction ...
- android工程中menu的使用总结
android的Menu使用 转自:thinkYeah的博客 1.普通的Menu 先来看看最简单的Menu怎样实现. 在主Activity中覆盖onCreateOptionsMenu(Menu men ...
- Android开发之Menu和actionBar
一.通过Menu目录下创建一个布局文件: 先看代码meu/main.xml: <?xml version="1.0" encoding="utf-8"?& ...
- Android学习笔记——menu
该工程的功能是实现两个数相乘,并在另外一个Activity中显示计算的结果 以下的代码是MainActivity.java中的代码 package com.example.menu; import a ...
- Android按键之Menu详解
Android手机一般都有三个键,返回键.Home键.菜单键: Android系统的菜单支持主要通过4个接口来实现. 从上图可以看出Menu是一个父类接口,它下面有两个子类一个是ContextMenu ...
随机推荐
- ubuntu 安装redis以及phpredis
一.安装redis 1. 去百度搜索 redis,然后去靠谱的地方下载最新的redisxxx.tar.gz 2. 解压后,sudo make 3. sudo make install 4. //安装完 ...
- 关于idea failed to start SceneBuilder 的解决方法
问题描述: javaFx无法启动SceneBuilder. 问题原因: SceneBuilder不正当配置. 解决方法:1. 下载SceneBuilder https://www.oracle.c ...
- php用户注册常用检测、写入
// 判断数据库是否已经存在 $check_sql = "select * from user where idNumber='$idNumber'"; $check_query ...
- 06--ubuntu的sqlite安装
知道学习嵌入式技术,数据库是必须懂的,看的书上嵌入式的教程都在用,看来我是非学不可了,下面就简单的记录一下我在Ubuntu 12.04系统上安装 SQLite 的过程以及使用. 相关阅读: SQLit ...
- Python之模块、正则
一.模块import 模块的实质就是把要导入模块里面的代码,从上到下执行一遍,找模块的顺序是,先从当前目录下找,找不到的话,再环境变量里面找导入的模块名字最好不要有.,a.import sysprin ...
- B.1 接口
几乎所有要学习的接口都位于 System.Collections.Generic 命名空间.图B-1展示了.NET4.5以前主要接口间的关系,此外还将非泛型的 IEnumerable 作为根接口包括了 ...
- Vi/Vim基本用法
Vi/Vim是Linux中一款功能强大的编辑器,vi是Visual Interface的缩写,即可视化接口,vim是vi iMprove的缩写,即 vi的增强版(具有语法着色功能).它在Linux上的 ...
- HDU - 5894 Pocky(概率)
HDU5894—Pocky Problem Description: Let’s talking about something of eating a pocky. Here is a Decore ...
- 【模板】Link-Cut Tree
#include<cstdio> #include<algorithm> #define N 500010 #define rg register #define ls (c[ ...
- SpringMVC demo 小例子,实现简单的登录和注册
1.创建一个动态的web工程 2.导入springMvc所需要的jar包(这里可以去网上找,资源有很多) 前两部就不详细描述了,后面才是正经代码~ 首先有一个web.xml文件,这个属于大配置文件,由 ...