我将自定义键盘实现为弹出窗口,如下所示。
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);
当我在列表视图的一行中选择一个元素时,会弹出自定义键盘。
一切正常。但是当我在列表底部选择一个元素时,弹出键盘会隐藏所选行。 如何通过移动列表来阻止弹出键盘隐藏选定的行。
答案 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);
希望这会对某人有所帮助。