Android 始终在文本字段上方显示AutoCompleteTextView弹出窗口

Android 始终在文本字段上方显示AutoCompleteTextView弹出窗口,android,autocompletetextview,Android,Autocompletetextview,我正在尝试开发一个小应用程序,其中我使用了AutoCompleteTextView,我使用了 simpleCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() { // my stub here } 当我的过滤变得特定时,我的下拉列表(锚定)就会在虚拟键盘的下方。这意味着我首先搜索的是 DR.然后在下拉列表(锚定)中显示15名医生的名单,

我正在尝试开发一个小应用程序,其中我使用了AutoCompleteTextView,我使用了

           simpleCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                      // my stub here
          }
当我的过滤变得特定时,我的下拉列表(锚定)就会在虚拟键盘的下方。这意味着我首先搜索的是
DR.然后在下拉列表(锚定)中显示15名医生的名单,没有任何问题。但当我键入DR.Kum时,现在Dropdown(Anchor)只有一个名称,这样Dropdown(Anchor)就会进入虚拟键盘。当它有15个列表名称时,它会完美地显示。如何始终在AutoCompleteTextView的上方显示下拉列表(锚定)。?

我用一个技巧解决了这个问题

       // It will capture number item in your DropDown . If number of item in drop is 2
      // or 1 , then hide keyboard.
      if(cur_hide_keyboard.getCount() ==2 || cur_hide_keyboard.getCount() ==1){
                                hideKeyBoard();
                            }

         private void hideKeyBoard() {
        InputMethodManager imm = (InputMethodManager) activity
                .getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(doctorsName.getWindowToken(), 0);
    }
  • 创建锚点的子类。在大多数情况下,锚定是
    AutoCompleteTextView
  • 以这种方式重写
    getWindowVisibleDisplayFrame
    方法,例如:

    class AutoCompleteTextViewImpl extends android.support.v7.widget.AppCompatAutoCompleteTextView {
        private boolean mShowDropDownAlwaysAbove;
    
        public AutoCompleteTextViewImpl(Context context) {
            super(context);
        }
    
        public void setShowDropDownAlwaysAbove(boolean showAbove) {
            mShowDropDownAlwaysAbove = showAbove;
        }
    
        @Override
        public void getWindowVisibleDisplayFrame(Rect outRect) {
            super.getWindowVisibleDisplayFrame(outRect);
            if (mShowDropDownAlwaysAbove)
                 outRect.bottom = -3000; // hack for https://github.com/AndroidSDKSources/android-sdk-sources-for-api-level-23/blob/master/android/widget/PopupWindow.java#L1449
        }
    }
    
  • 现在,
    下拉列表将始终显示在上面。
    
    原因隐藏在计算顶部坐标的过程中。

    我也在努力解决同样的问题……有人知道吗