2016-11-18 91 views
0

我实现了一个自定义键盘,如下面的弹出窗口。自定义弹出窗口键盘在弹出时隐藏底部列表项

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

技巧是在调整列表视图。我通过切换列表的高度(footerView)来做到这一点。并顺利滚动到该项目。 除非通过post()将事件发送到UI线程,否则滚动将不起作用。 (欲了解更多信息()退房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); 

希望这会帮助别人。