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

时间: 2024-10-20 18:33:42

android 细节之 menu 之 invalidateOptionsMenu的相关文章

android 细节之禁用返回键

今天项目中需要使用自己actionBar中的返回键,用的方法就是上次我记录下的父亲activity的方法 android.support.PARENT_ACTIVITY 详情请移步:http://blog.csdn.net/yiding_he/article/details/38410151 (android 细节之 menu 之 invalidateOptionsMenu) 今天的问题是禁用系统的返回键,禁用home键应该是需要permission,而且禁用后用户体验不够.所以项目中我们防止用

处女男学Android(十二)---Android 菜单(Menu)详解与应用

一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42170771 本篇blog将记录一下Android中菜单的使用方法,虽然在新版本中推荐使用ActionBar去替代菜单,但我认为菜单依然是挺不错的一种UI交互组件,比ActionBar好点一些,对于手指不灵活的人比起来ActionBar右上角的那个方块小按钮,或许ta会更喜欢Menu呢,废话不多说,下面就具体介绍一下Android中关于Menu的使用方法. 二.创建第一

android 细节之android.view.InflateException: Binary XML file line #95: Error inflating class(out of m)

今天的异常很有意思,叫做android.view.InflateException: Binary XML file line #95: Error inflating class(out of memory) . 其实是因为out of memory,导致 xml是不可能被充气成功,因此activity的onCreate方法中, setContentView(R.layout.***)也就不可能成功调用. 他出现在我有多个教学动画,并且播放的动画,是基于imageView,imageView的

Android菜单详解(一)——理解android中的Menu

前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性.An

Android细节问题总结(二)

这篇博客是用来记录自己在写代码的过程中遇到的一些问题,以及解决方法,做一个总结,算是笔记吧. 1.问题描述: 以某一触发唤醒屏幕 解决方案: public static void wakeUpAndUnlock(Context context){ KeyguardManager km= (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock kl = km

android 细节之 旋转动画

Flip Animation for Android: 最近项目中用到了一个小动画,让物体实现一定的3D旋转效果,现记录如下: public class FlipAnimation extends Animation { private Camera mCamera; private View mFromView; private View mToView; private float mCenterX; private float mCenterY; private boolean mForw

android 细节之 AndroidRuntimeException:This message is already in use

今天在做项目处理消息队列的时候,遇到了这样一个问题,一个异常.AndroidRuntimeException:This message is already in use. 我当时的具体业务需求情境为,想要跟硬件联动的时候,保持在一定时间内只有一个操作,如果不idle,就重新发送消息,并且此消息应该delay一段时间,就是TIMEDELAY. 具体出现错误的代码如下: private class ChargecaseServiceHandler extends Handler { public

android工程中menu的使用总结

android的Menu使用 转自:thinkYeah的博客 1.普通的Menu 先来看看最简单的Menu怎样实现. 在主Activity中覆盖onCreateOptionsMenu(Menu menu)方法. 代码 @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, 1, 1, "苹果"); menu.add(0, 2, 2,

Android Studio —— 创建Menu菜单项

大多数android程序的右上角都会设置一个菜单按钮比如微信的界面右上角的加号. 这个需要在layout同级目录下新建文件夹命名为menu,再右击新建的menu新建xml文件: xml文件代码: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item andr