1

I want to show a PopupWindow above virtual keyboard like Google Keep did when creating a reminder:

enter image description here

ywwynm
  • 11,573
  • 7
  • 37
  • 53

3 Answers3

13

I believe, what you are looking for is combination of:

popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);

It's basically how native SearchView works: https://android.googlesource.com/platform/frameworks/support/+/android-6.0.1_r31/v7/appcompat/src/android/support/v7/widget/SearchView.java#1695 which basically calls AutocompleteTextView.ensureImeVisible()

public void ensureImeVisible(boolean visible) {
    mPopup.setInputMethodMode(visible
            ? ListPopupWindow.INPUT_METHOD_NEEDED : ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
    if (mPopup.isDropDownAlwaysVisible() || (mFilter != null && enoughToFilter())) {
        showDropDown();
    }
}

This would resize Popup window to be shown exactly between Anchor and Keyboard.

Oleksandr
  • 3,761
  • 8
  • 50
  • 80
  • this solved another problem i wanted to solve, which was to let keyboard ABOVE my popup :) just used .setInputMethodMode(ListPopupWindow.INPUT_METHOD_NEEDED) – usernotnull May 03 '17 at 13:05
0

use the following code. Change the location of the popup window in the method "showAtLocation".

    LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    PopupWindow pw = new PopupWindow(inflater.inflate(R.layout.popup_layout, null, false), ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT, true);
    findViewById(R.id.activity_layout).post(new Runnable() {
        @Override
        public void run() {
            pw.showAtLocation(findViewById(R.id.activity_layout), Gravity.CENTER, 0, 0); //set location here
        }
    });
Ali Hariri
  • 11
  • 1
0

To make a PopupWindow display above (on top of, or in front of) the on-screen keyboard, and make it dismiss when clicked outside, use this:

popupWindow = new PopupWindow(context);
popupWindow.setFocusable(true);
popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);

Sample code: https://github.com/lorensiuswlt/NewQuickAction3D


To make a ListPopupWindow display in front of the keyboard, and make it automatically close when clicked outside, use this:

listPopupWindow = new ListPopupWindow(context);
listPopupWindow.setModal(true);
listPopupWindow.setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);

Sample code: Custom PopupMenu (layout)

Mr-IDE
  • 7,051
  • 1
  • 53
  • 59