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用來做標題欄也非常方便,可是近期的實際開發中,前輩們貌似都是用我剛才提到的方法來做菜單,特記之。