ListView 在按鍵式手機(jī)上第一次無焦點(diǎn),第一次按鍵無效問題

開發(fā)小眾的按鍵手機(jī)(沒有觸摸屏),經(jīng)常遇到各種與觸摸相關(guān)的問題。
按鍵手機(jī)上,第一次進(jìn)入界面沒有焦點(diǎn),或者需要按鍵兩次才能生效。這個問題是由于touchmode 引起的。
貼一段引用:
1.touchmode是區(qū)分觸摸狀態(tài)和非觸摸狀態(tài)而設(shè)置的。
2.touchMode就是當(dāng)你點(diǎn)擊屏幕(當(dāng)然是觸摸屏)的時候就會被激活,而你點(diǎn)擊物理按鍵的時候則會退出此模式。

所以第一次按鍵無效的原因是,按鍵用來退出touchmode了。如果touchmode 錯誤,那么所有view里面 isInTouchMode的邏輯就會錯誤,導(dǎo)致出現(xiàn)bug。

我遇到的問題Listview 第一次開機(jī),按鍵無效,就是因?yàn)閕sInTouchMode(),判斷錯誤,直接返回-1導(dǎo)致。

所以如果整個項(xiàng)目都沒有觸摸屏,根據(jù)我查找代碼(沒有實(shí)際試驗(yàn)),將config_defaultInTouchMode默認(rèn)值改為false,應(yīng)該能避免不少問題。

<bool name="config_defaultInTouchMode">true</bool>

如果單獨(dú)針對修改,只要在listview 生成前,強(qiáng)行退出touchmode就可以。
//import android.app.Instrumentation;

Instrumentation inst = new Instrumentation();
inst.setInTouchMode(false);

具體調(diào)用:
Instrumentation 調(diào)用了WindowManagerService.java的setInTouchMode,退出了touchmode
ServiceManager.getService("window")).setInTouchMode(inTouch);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容