始终在TextField上方显示AutoCompleteTextView Popup

时间:2014-09-01 10:39:47

标签: android autocompletetextview

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

           simpleCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                      // my stub here
          }

由于我的过滤具体,我的Dropdown(Anchor)低于虚拟键盘。这意味着首先我搜索 DR。然后显示Dropdown(Anchor)中的15名医生名单,没有任何问题。但是当我键入 DR.Kum 时,现在Dropdown(Anchor)只有一个名称,因此Dropdown(Anchor)会降低虚拟键盘。当它有15个名字的列表时,它显示完美。如何显示Dropdown(Anchor)总是高于AutoCompleteTextView。??

2 个答案:

答案 0 :(得分:1)

我通过一招来解决了这个问题

       // 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);
    }

答案 1 :(得分:1)

  1. 创建锚点的子类。在大多数情况下,锚点为AutoCompleteTextView
  2. 以这种方式覆盖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
        }
    }
    
  3. 现在dropDown将始终显示在上方。 原因是隐藏in this portion of the code负责计算顶部坐标。