zoukankan      html  css  js  c++  java
  • 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用来做标题栏也非常方便,可是近期的实际开发中,前辈们貌似都是用我刚才提到的方法来做菜单,特记之。




  • 相关阅读:
    浏览器相关,回流和重绘
    Vue相关,Vuex 通俗版教程
    关于Base64
    【1801日語听解4】第7回:4月14日
    【日語听解2】第6回:4月13日
    【日語視聴説2】第6回:4月13日
    【1701日本語新聞編集】第6回:4月10日
    【1801日語写作】第6回:4月8日
    【1801日本語新聞選読】第6回:4月7日
    【1801日語听解4】第6回:4月7日
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6912393.html
Copyright © 2011-2022 走看看