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開發 - Movie 類詳解Android
- Android開發 - RecyclerView 類詳解AndroidView
- Android API開發之OpenGL開發之Android OpenGL STL詳解AndroidAPI
- 影視APP開發基礎功能詳解APP
- Android解決The APK file app-debug.apk does not exist on disk.AndroidAPKAPP
- Hero Age v5.6.10 MOD APK (Menu/One Hit, God Mode)APKGo
- PhoneGap Hybrid APP 開發實戰(1):第一個 Android APKAPPAndroidAPK
- Flutter完整開發實戰詳解(十四、混合開發打包 Android 篇)FlutterAndroid
- Android APK反編譯技巧全講解AndroidAPK編譯
- Flutter 38: 圖解 Android 打包 APK 檔案Flutter圖解AndroidAPK
- uni-app&H5&Android混合開發二 || 使用Android Studio打包應用APKAPPH5AndroidAPK
- Android APK打包流程AndroidAPK
- android開發--防止介面被抓包Android
- Android開發 - (介面卡)Adapter類中BaseAdapter實現類詳細解析AndroidAPT
- Android開發 - (介面卡)Adapter類中SimpleAdapter實現類詳細解析AndroidAPT
- Android開發:日誌功能備忘Android
- 軟體測試(功能、介面、效能、自動化)詳解
- android事件分發機制詳解Android事件
- 【Android APK】解析SD卡上的APK檔案AndroidAPKSD卡
- Android之Apk加殼AndroidAPK
- Android空包Apk簽名AndroidAPK
- Flutter 打包 android端 apkFlutterAndroidAPK
- 「葡萄城公開課」WijmoJS 前端開發工具包-新功能詳解JS前端
- Android開發:APK的反編譯(獲取程式碼和資原始檔)AndroidAPK編譯
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- API介面開發(一):介面開發返回結果解決方案API
- Android之重新簽名APKAndroidAPK
- Android Studio打包專案:APKAndroidAPK
- Gluon 編譯 JavaFx -> android apk編譯JavaAndroidAPK
- 簽名打包Android版apkAndroidAPK
- APK瘦身屬性——android:extractNativeLibsAPKAndroid
- Android AsyncTask 詳解Android
- Android拖拽詳解Android
- Android | 教你如何開發掃二維碼功能Android
- SpringMVC【開發Controller】詳解SpringMVCController
- android基礎學習-android篇day16-Menu的使用Android
- Android Apk反編譯系列教程(一)如何反編譯APKAndroidAPK編譯
- RK3588開發板豐富的功能介面