ListPopupWindow控件

setInputMethodMode

INPUT_METHOD_FROM_FOCUSABLE 根据可否获取焦点判断是否可输入. 感觉鸡肋
INPUT_METHOD_NEEDED 允许输入
INPUT_METHOD_NOT_NEEDED 不允许输入

android:windowSoftInputMode

softInputMode

包含九种取值, 可组合使用,分为两类:
参考:
http://www.jb51.net/article/56043.htm

显示状态模式

SOFT_INPUT_STATE_UNSPECIFIED 默认模式
SOFT_INPUT_STATE_HIDDEN
SOFT_INPUT_STATE_ALWAYS_HIDDEN 总是隐藏
SOFT_INPUT_STATE_UNCHANGED
SOFT_INPUT_STATE_VISIBLE
SOFT_INPUT_STATE_ALWAYS_VISIBLE 自动弹出软键盘
调整模式
SOFT_INPUT_ADJUST_UNSPECIFIED 默认模式
SOFT_INPUT_ADJUST_RESIZE 软键盘弹出后PopupWindow会自动调整坐标,不被遮挡
SOFT_INPUT_ADJUST_PAN

活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:
1> 软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。
2> 活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。

它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如:
在这设置的值(除"stateUnspecified"和"adjustUnspecified"以外)将覆盖在主题中设置的值

image.png
 mAutoAdapter = new RoadListAdapter(getActivity(), mAutoList);
        mListPopupWindow = new ListPopupWindow(getActivity());
        mListPopupWindow.setAdapter(mAutoAdapter);
        mListPopupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        mListPopupWindow.setHeight(360);
        //设置ListPopupWindow的锚点,即关联PopupWindow的显示位置和这个锚点
        mListPopupWindow.setAnchorView(vAnchorView);


 if (!mListPopupWindow.isShowing()) {

            //弹出窗体PopupWindow需要软键盘
            mListPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);


          //再设置模式,和Activity的设置一样,覆盖,调整大小。
mListPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
            mListPopupWindow.show();
        }

解决方案

https://jingyan.baidu.com/article/86f4a73e77195e37d6526998.html

最好自定义控件 :监听 软键盘 ,用来隐藏 某些布局来节约空间

推荐阅读更多精彩内容