弹出时自定义的popupWindow键盘隐藏底部列表项

时间:2016-11-18 15:06:31

标签: android android-layout listview android-softkeyboard

我将自定义键盘实现为弹出窗口,如下所示。

LayoutInflater layoutInflater = (LayoutInflater)getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
keyboardView = layoutInflater.inflate(R.layout.keyboard_guess, null);
final PopupWindow popupWindow = new PopupWindow(
                    keyboardView,
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT,
                    true);

// init keyboard keys
setKeyBoardKeys();

popupWindow.showAtLocation(keyboardView, Gravity.BOTTOM, 0, 0);

当我在列表视图的一行中选择一个元素时,会弹出自定义键盘。

一切正常。但是当我在列表底部选择一个元素时,弹出键盘会隐藏所选行。 如何通过移动列表来阻止弹出键盘隐藏选定的行。

1 个答案:

答案 0 :(得分:0)

Trick正在调整列表视图的大小。我通过切换列表的高度和它下面的视图(footerView)来做到这一点。并通过平滑滚动到项目。 除非您通过post()将事件分派给UI线程,否则滚动将不起作用。 (有关post()的更多信息,请查看this)。

以下是我对上述问题的解决方案。

        // re size the list view (push up) to provide space for the keyboard
        mListView.post( new Runnable() {
            @Override
            public void run() {
                LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) mListView.getLayoutParams();
                View footerView = findViewById(best_guess_list_footer);
                LinearLayout.LayoutParams fParams = (LinearLayout.LayoutParams) footerView.getLayoutParams();


                listHeightWeight = lParams.weight;
                mListView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, 0, fParams.weight));
                mListView.requestLayout();
                mItemAdapter.notifyDataSetChanged();
                mListView.smoothScrollToPosition(position);
            }
        });

        popupWindow.showAtLocation(keyboardView, Gravity.BOTTOM, -100, -100);

希望这会对某人有所帮助。