38-Android之AutoCompleteTextView在输入法FullscreenMode模式下出现的屏幕闪现问题
平台: MTK6739 Android10
测试发现, 输入法为全屏模式, 某些输入框在进行输入的时候, 会导致输入框所在的界面在输入法全屏模式的界面闪现, 但是有些时候又不会出该问题.
经过分析, 发现当输入框的类型为AutoCompleteTextView, 并且有候选项的时候, 才会导致该问题的出现. 因此, 考虑是候选项的PopupWindow弹出, 导致Window窗口排序重排导致的.
解决方法, 当输入法为FullscreenMode模式时, 不弹出候选项的PopupWindow.
类:
frameworks/base/core/java/android/widget/AutoCompleteTextView.java
/**
* Issues a runnable to show the dropdown as soon as possible.
*
* @hide internal used only by SearchDialog
*/
@UnsupportedAppUsage
public void showDropDownAfterLayout() {
// 修改此处, begin @{
InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isFullscreenMode()){
return;
}
// }@ end
mPopup.postShow();
}
/**
* <p>Displays the drop down on screen.</p>
*/
public void showDropDown() {
buildImeCompletions();
if (mPopup.getAnchorView() == null) {
if (mDropDownAnchorId != View.NO_ID) {
mPopup.setAnchorView(getRootView().findViewById(mDropDownAnchorId));
} else {
mPopup.setAnchorView(this);
}
}
if (!isPopupShowing()) {
// Make sure the list does not obscure the IME when shown for the first time.
mPopup.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED);
mPopup.setListItemExpandMax(EXPAND_MAX);
}
// 修改此处 begin @{
// mPopup.show();
// mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(!inputMethodManager.isFullscreenMode()) {
mPopup.show();
mPopup.getListView().setOverScrollMode(View.OVER_SCROLL_ALWAYS);
}
}
// }@ end