編輯:關於Android編程
Android 的菜單機制,在 Android 3.0 之前和之後有很大的去別,Android 3.0 推出 ActionBar ,導航的 UI 交互有很大的變化,但菜單的邏輯和接口還是一樣的。這裡主要介紹下 Android 菜單創建、使用,後面介紹 ActionBar,SherlockActionBar 與 菜單的結合使用,自定義菜單的創建。
Android 菜單主要有4種:
OptionMenu
ContextMenu
PopMenu
SubMenu
下面先介紹下 OptionMenu ,分別使用 xml 文件和 JAVA 代碼創建 菜單。
1.OptionMenu
選項菜單,點擊 Menu 鍵時彈出,選中菜單項或者點擊其他區域,菜單消失。
optionMenu 的相關方法的實現在 Activity 中 ,相關的方法有:
@Override public boolean onCreateOptionsMenu(Menu menu) { Log.d(tag, onCreateOptionsMenu); return super.onCreateOptionsMenu(menu); } @Override public boolean onPrepareOptionsMenu(Menu menu) { Log.d(tag, onPrepareOptionsMenu); return super.onPrepareOptionsMenu(menu); } @Override public void onOptionsMenuClosed(Menu menu) { System.out.println(onOptionsMenuClosed); Log.d(tag, onOptionsMenuClosed); super.onOptionsMenuClosed(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_save: Log.d(tag, action_save); break; case R.id.action_settings: Log.d(tag, action_settings); break; case R.id.action_delete: Log.d(tag, action_delete); break; case R.id.action_edit: Log.d(tag, action_edit); break; } return super.onOptionsItemSelected(item); }
onCreateOptionMenu ,在 Activity 生命周期內 只執行一次,onPrepareOptionMenu每次打開菜單都會執行,菜單消失的時候執行onOptionsMenuClosed方法,菜單被選中時執行 onOptionsItemSelected 。
下面看下在 Android 2.3 系統上用 XML 創建的 OptionMenu ,具體效果圖如下。
第一張:4個菜單選項,沒有圖標
第二張:8個菜單項,有圖標
第三張:點擊更多,沒有圖標
同樣的代碼,如果 不兼容(最低版本>11) Android 3.0 之前的版本,在 Android4.4 上是什麼效果呢 ?
第一張:4個菜單選項,沒有圖標 ,只顯示出兩個,多了一個更多的標識
第二張:點擊更多菜單項
第三張:8個菜單項,有圖標,但是顯示出的菜單沒有文字,更多中菜單項只有文字
第四張:點擊更多,沒有圖標
下面看下具體的代碼
1. 編寫 menu.xml
android:orderInCategory 菜單項在 菜單中的位置
2. 在 Activity 中添加 菜單
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); Log.d(tag, onCreateOptionsMenu); inflater.inflate(R.menu.main_icon, menu); return super.onCreateOptionsMenu(menu); }
3. 菜單事件的響應
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_save: Log.d(tag, action_save); break; case R.id.action_settings: Log.d(tag, action_settings); break; case R.id.action_delete: Log.d(tag, action_delete); break; case R.id.action_edit: Log.d(tag, action_edit); break; case R.id.action_search: Log.d(tag, action_search); break; } return super.onOptionsItemSelected(item); }
這樣,就完成了菜單的創建、使用、響應。
Android 官方推薦使用 XML 創建菜單,同時也可以在 JAVA 代碼中創建 菜單。實現過程如下
a. 直接在 onCreateOptionsMenu() 方法中添加菜單項
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); //menu.add(int groupid,int itemid,int orderid,String title)方法參數 //add 方法返回一個 MenuItem 對象,可以添加圖標,調用 setIcon() 方法 Log.d(tag, onCreateOptionsMenu); menu.add(0, Menu.FIRST+1, Menu.FIRST+1, menusStrings[0]).setIcon(android.R.drawable.ic_menu_add); menu.add(0, Menu.FIRST+2, Menu.FIRST+2, menusStrings[1]).setIcon(android.R.drawable.ic_menu_agenda); menu.add(0, Menu.FIRST+3, Menu.FIRST+3, menusStrings[2]).setIcon(android.R.drawable.ic_menu_call); menu.add(0, Menu.FIRST+4, Menu.FIRST+4, menusStrings[3]).setIcon(android.R.drawable.ic_menu_close_clear_cancel); menu.add(0, Menu.FIRST+5, Menu.FIRST+5, menusStrings[4]).setIcon(android.R.drawable.ic_menu_crop); menu.add(0, Menu.FIRST+6, Menu.FIRST+6, menusStrings[5]).setIcon(android.R.drawable.ic_menu_upload); inflater.inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); }
b. 響應菜單選中事件
響應選中事件方式和上面一樣,就不再貼出代碼了~。
關於 OptionsMenu的 介紹就這些啦,大家有問題在評論交流啊
在5.2.1節和5.2.2節介紹了<a>標簽以及TextView自動識別的特殊文本(網址、電話號、Email等),這些都可以通過單擊來觸發不同的動作。雖然這些
(轉載請注明出處:http://blog.csdn.net/buptgshengod) 1.背景 在android源碼中我們能看到各種以@開頭的字符,他們大
在自定義ListView中,需要將下拉刷新的View在初始化的時候設置padding隱藏起來,這時就要在初始化的時候獲得要加載的布局View的高度。 private V
本章使用GridView控件來做一個相冊效果。 圖片效果如下: 響應點擊事件,點擊的時候提示是當前第幾章圖片,從左到右,從上到下。 點擊了第一張圖片,顯示了1. 步