開發(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);