测试反馈Android蓝牙遥控器适配问题:瞩目应用中,点击加入会议,使用遥控器点击返回键收起输入法键盘,再点击会议名称栏无法调出输入法键盘。此问题在Android 6.0必现。
经查看分析,应用使用了AutoCompleteTextView控件,此控件自动添加了onclicklistener监听事件。
AutoCompleteTextView继承了EditText,EditText的父类是TextView。蓝牙遥控器的确定按键对应的Android keycode事件是KeyEvent.KEYCODE_DPAD_CENTER。之后查看TextView类得知,Android 6.0系统在设有onclicklistener监听的输入框时,遥控器确定键按下默认不调起输入法。
所以只需修改TextView类的onKeyUp方法,在收到KEYCODE_DPAD_CENTER时,放开hasonClickListener判断,即可直接调起输入法。
文件位置: /frameworks/base/core/java/android/widget/TextView.java
修改如下:
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (!isEnabled()) {
return super.onKeyUp(keyCode, event);
}
if (!KeyEvent.isModifierKey(keyCode)) {
mPreventDefaultMovement = false;
}
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER:
if (event.hasNoModifiers()) {
/*
* If there is a click listener, just call through to
* super, which will invoke it.
*
* If there isn't a click listener, try to show the soft
* input method. (It will also
* call performClick(), but that won't do anything in
* this case.)
*/
////add by pengtg for ROM begin.
//if (!hasOnClickListeners()) {
if (mMovement != null && mText instanceof Editable
&& mLayout != null && onCheckIsTextEditor()) {
InputMethodManager imm = InputMethodManager.peekInstance();
viewClicked(imm);
if (imm != null && getShowSoftInputOnFocus()) {
imm.showSoftInput(this, 0);
}
}
//}
////add by pengtg for ROM end.
}
return super.onKeyUp(keyCode, event);
......
}
......
}