开发小众的按键手机(没有触摸屏),经常遇到各种与触摸相关的问题。
按键手机上,第一次进入界面没有焦点,或者需要按键两次才能生效。这个问题是由于touchmode 引起的。
贴一段引用:
1.touchmode是区分触摸状态和非触摸状态而设置的。
2.touchMode就是当你点击屏幕(当然是触摸屏)的时候就会被激活,而你点击物理按键的时候则会退出此模式。
所以第一次按键无效的原因是,按键用来退出touchmode了。如果touchmode 错误,那么所有view里面 isInTouchMode的逻辑就会错误,导致出现bug。
我遇到的问题Listview 第一次开机,按键无效,就是因为isInTouchMode(),判断错误,直接返回-1导致。
所以如果整个项目都没有触摸屏,根据我查找代码(没有实际试验),将config_defaultInTouchMode默认值改为false,应该能避免不少问题。
<bool name="config_defaultInTouchMode">true</bool>
如果单独针对修改,只要在listview 生成前,强行退出touchmode就可以。
//import android.app.Instrumentation;
Instrumentation inst = new Instrumentation();
inst.setInTouchMode(false);
具体调用:
Instrumentation 调用了WindowManagerService.java的setInTouchMode,退出了touchmode
ServiceManager.getService("window")).setInTouchMode(inTouch);
网友评论