我在AppCompatAutoCompleteTextView
的底部有DialogFragment
。
在横向模式下的平板电脑(API 19)上,当建议列表中只有一个元素时,键盘会覆盖下拉列表。当有更多元素时,下拉列表会向上移动,并且工作正常。
在移动设备(API 22)上,即使建议列表中只有一个元素,也没有任何问题,下拉列表始终显示在上方。
我已经将android:windowSoftInputMode="adjustPan|stateHidden"
添加到了Manifest中的活动。
如何让下拉列表始终向上或不被键盘覆盖?
答案 0 :(得分:0)
Work around the below the completionThreshold. Hope it works for you!
<AutoCompleteTextView
android:id="@+id/someID"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:completionThreshold="1" />
或
autocomplete.setThreshold(2);
答案 1 :(得分:0)
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager inputMethodManager =
(InputMethodManager) activity.getSystemService(
Activity.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(
activity.getCurrentFocus().getWindowToken(), 0);
}
public void setupUI(View view) {
// Set up touch listener for non-text box views to hide keyboard.
if (!(view instanceof EditText)) {
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(getActivity());
return false;
}
});
}
//If a layout container, iterate over children and seed recursion.
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
setupUI(innerView);
}
}
}
在oncreate
setupUI(rootView.findViewById(R.id.parent));
答案 2 :(得分:0)
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
try {
if (view != null) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(mContext.INPUT_METHOD_SERVICE);
if (!imm.hideSoftInputFromWindow(autoCompleteTextView.getWindowToken(), WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)) {
//call dialog dismiss code here
}
}
} catch (Exception e) {
ExceptionUtils.logException(e);
}
}
return false;
}
});
hideSoftInputFromWindow在键盘关闭时返回true,否则返回false。所以在第一次回来按下它会关闭键盘,在第二次按下它会进入,如果条件和解雇对话那里