2016-11-18 83 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); 

希望這會幫助別人。