在recovery模式首頁,recovery系統通過呼叫getmenuitems()函式向我們展示了乙個選項列表,當有按鍵操作發生時,系統會通過handlemenukey()函式來處理按鍵操作。通常情況下我們可以通過操作volumeup和volumedown來切換選項。原生環境下,如果當前選項為首項或尾項,我們想要切換至尾項或首項時,不得不頻繁操作volumeup和volumedown進行切換。影響使用者體驗。那麼如果當前選項為首項或尾項時,我們如何通過一次操作進行首尾項的切換呢?
首先我們來看recovery系統處理按鍵的函式handlemenukey()。
int handlemenukey(int key, int visible) else else if (!menu_only) {
chosen_item = action;
ui->endmenu();
return chosen_item;
上面標註為紅色的**也就是recovery系統相應按鍵作出的選項切換的動作。也就是說如果當前使用者按下一次volumeup健,recovery系統就會向上切換選項選單。但是如果當前選項選單處於首項或尾項時,recovery系統就會呼叫screen_ui.cpp中的selectmenu()函式進行進一步的處理。
原始碼位址:
int screenrecoveryui::selectmenu(int sel) {
int old_sel;
pthread_mutex_lock(&updatemutex);
if (show_menu > 0) {
old_sel = menu_sel;
menu_sel = sel;
if (menu_sel < 0) menu_sel = 0;//這裡表示如果當前項為首項,按鍵操作為向上切換時,保持首項不變。
if (menu_sel >= menu_items) menu_sel = menu_items-1;//這裡表示如果當前項為尾項,按鍵操作為向下切換時,保持尾項不變。
sel = menu_sel;
if (menu_sel != old_sel) update_screen_locked();//重繪screen重新整理介面
pthread_mutex_unlock(&updatemutex);
return sel;
上面紅色部分即原生對當前項為首項或尾項時,切換選項所作出的處理。對於處理的方法在上面的備註中已經有相應的注釋。那麼我們想要實現迴圈切換選項的突破口也就是這個函式了。下面是修改後的函式:
int screenrecoveryui::selectmenu(int sel) {
int old_sel;
pthread_mutex_lock(&updatemutex);
if (show_menu > 0) {
old_sel = menu_sel;
menu_sel = sel;
if (menu_sel < 0) {
menu_sel = menu_items-1;//這裡表示如果當前項為首項,按鍵操作為向上切換時,切換至尾項
else if (menu_sel >= menu_items){
menu_sel = 0;//這裡表示如果當前項為尾項,按鍵操作為向下切換時,切換至首項
sel = menu_sel;
if (menu_sel != old_sel) update_screen_locked();//重繪screen重新整理介面
pthread_mutex_unlock(&updatemutex);
return sel;
listView長安出現選項選單
最近自己做了個東西,裡面需要長按listview出現選項選單來進行對這個list的操作,在網上查了許多方法,最後選擇了乙個可以跟list中某個指定的item互動的方法 public class myonitemlongclicklistener implements adapterview.onit...
清除右鍵選單多餘的選項
依次選擇 開始 執行 在 開啟 對話框框中輸入 regedit 單擊 確定 按鈕,開啟 登錄檔編輯器 視窗,展開 hkey classes root shellex contextmenuhandlers 分支,在其下找到要刪除的無用項,然後右鍵單擊該 項,再單擊 刪除 將其刪除即可清除右鍵選單中的...
恢復右鍵選單的「新建」選項
剛剛在用網上下的乙個右鍵選單管理工具,結果折騰的右鍵選單裡面 新建 沒有了,只好求助網路了。還好很快找到了解決辦法 主要就是安裝乙個inf檔案,主要 是 version signature chicago defaultinstall addreg my.add.reg my.add.reg hkc...