Android APK開發:Menu介面功能詳解
Menu介面功能詳解
最近開發一個APK專案,用到了menu選單,並要求其中的一個item標識是否連線藍芽。思路很簡單,用一個全域性靜態變數來標識藍芽連線狀態,並在更新選單時判斷這個變數,然後選擇不同處理方式,即顯示不同的圖片。
本文的初衷是對Android的menu功能作總結,所以並不會一步步的教大家去實現上文論述的功能,這裡僅對menu涉及的幾個介面做描述。
1、onCreateOptionsMenu
public boolean onCreateOptionsMenu(Menu menu)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//R.menu.main就是想要載入的Menu選單,是一個xml檔案,一般放在res/Menu下
getMenuInflater().inflate(R.menu.main, menu);
super.onPrepareOptionsMenu(menu);
//這裡直接讓顯示了
return true;
}
回撥函式,在第一次初始化選單的時候呼叫,其中menu引數就是即將要顯示的Menu例項。
2、onPrepareOptionsMenu
public boolean onPrepareOptionsMenu(Menu menu)
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (UART_STATE) {
//bluetooth_status是選單項的ID,是需要動態更新的,這裡根據全域性變數UART_START設定了不同的圖片
menu.findItem(R.id.bluetooth_status).setIcon(R.drawable.actionbar_statuson_icon);
} else {
Log.e(TAG, "onPrepareOptionsMenu: false");
menu.findItem(R.id.bluetooth_status).setIcon(R.drawable.actionbar_status_icon);
}
return super.onPrepareOptionsMenu(menu);
}
回撥函式,此方法在onCreateOptionsMenu之後,在選單顯示之前被呼叫。可以通過此方法動態的改變選單的狀態。(上文中對藍芽連線狀態的判斷就是在這裡處理的,對Menuitem做了更改填充圖片的操作)。
3、onOptionsItemSelected
public boolean onOptionsItemSelected(MenuItem item)
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
//當點選選單項R.id.bluetooth_status時,程式碼會回撥到這裡
case R.id.bluetooth_status:
...;
break;
}
}
回撥函式,對選單項的監聽。這個介面傳入的引數和前面兩個的不一樣,傳入的是MenuItem,通過它可以獲得被點選的選單項的id。類似的,也就可以像Button點選時間一樣做對應處理。
4、invalidateOptionsMenu
public void invalidateOptionsMenu()
用於將現有的選單無效,然後系統會重新呼叫onPrepareOptionsMenu(),為開發者提供一個介面手動更新選單。需要更新時直接呼叫即可。
5、介面1和介面2的區別
介面1僅僅在activity建立的時候呼叫一次。介面2會在點選menu鍵被呼叫,也就是可以被多次呼叫,所以在介面2可以對選單狀態做動態更新。
6、版本問題(轉載,未做驗證)
Android2.3或更低的版本會在每次Menu開啟的時候呼叫一次onPrepareOptionsMenu()。
Android3.0及以上版本預設menu是開啟的,所以必須呼叫invalidateOptionsMenu()方法,然後系統將呼叫onPrepareOptionsMenu()執行update操作。
一般使用menu會用到1、3介面,在程式碼中重寫,相互配合就可以實現一個簡單的選單,包括選單顯示和點選響應。但是如果需要根據情況動態更新menu,則會用到2、4。差不多就介紹到這裡吧,重要程式碼都已經放在介面介紹後面,為大家作參考,自己有時間也會做一個Demo出來,後續也會更新。
雖然又做了一次搬用工,但是希望對自己有用,最好也能幫助到你+_+。
參考網址:
https://blog.csdn.net/zzq123686/article/details/52448412
https://blog.csdn.net/yiding_he/article/details/38410151
相關文章
- Android開發 —— apk打包流程AndroidAPK
- menu.lst詳解
- 轉[Android]APK打包過程詳解(一)AndroidAPK
- 轉[Android]APK打包過程詳解(二)AndroidAPK
- Android APK簽名原理和過程詳解AndroidAPK
- Android -- Options Menu,Context Menu,Popup MenuAndroidContext
- Android開發規範詳解Android
- ANDROID開發之SQLite詳解AndroidSQLite
- Android開發 - RecyclerView 類詳解AndroidView
- Android開發 - Movie 類詳解Android
- 影視APP開發基礎功能詳解APP
- Android開發把專案打包成apkAndroidAPK
- Android API開發之OpenGL開發之Android OpenGL STL詳解AndroidAPI
- Android應用開發—Intent元件詳解AndroidIntent元件
- android開發之GPS定位詳解Android
- Android開發如何有效減小APK的體積AndroidAPK
- Android開發:ContentProvider例項詳解AndroidIDE
- Android開發中的MVP架構詳解AndroidMVP架構
- Android Studio ndk-Jni開發詳解Android
- Android APK反編譯就這麼簡單 詳解(附圖)AndroidAPK編譯
- EasyPR--開發詳解(6)SVM開發詳解
- android的Menu使用Android
- Flutter完整開發實戰詳解(十四、混合開發打包 Android 篇)FlutterAndroid
- 詳解在Android中整合高德定位功能Android
- Android 開發功能模組總結Android
- Hero Age v5.6.10 MOD APK (Menu/One Hit, God Mode)APKGo
- 軟體測試(功能、介面、效能、自動化)詳解
- android Fragments詳解三:實現Fragment的介面AndroidFragment
- API介面開發(一):介面開發返回結果解決方案API
- Android解決The APK file app-debug.apk does not exist on disk.AndroidAPKAPP
- android開發--防止介面被抓包Android
- Android Apk 打包AndroidAPK
- 「葡萄城公開課」WijmoJS 前端開發工具包-新功能詳解JS前端
- Android開發:日誌功能備忘Android
- Android APK反編譯技巧全講解AndroidAPK編譯
- Flutter 38: 圖解 Android 打包 APK 檔案Flutter圖解AndroidAPK
- Windows下搭建React Native Android開發環境詳解WindowsReact NativeAndroid開發環境
- iptables 功能詳解