How to get height of keyboard when activity created in android

Viewed 8950

I want to auto display a listview with same height of keyboard of device when user goes to that particular activity. For this, I am calling three methods that are, showKeyboard(), getKeyboardHeight() and then hideKeyboard() and then giving height to that listview and showing that listview. But the problem is once I call showKeyboard(), calculate height and then hideKeyboard(), the keyboard doesn't hide and remains visible. Also I'm getting height as 0. I cannot display that listView. Is there any another process to get height of keyboard or any correction in below code ? See the code below :

showKeyboard() method -

private void showKeyboard() {
             InputMethodManager keyboard = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
             keyboard.showSoftInput(editChatBox, 0);
        }

getKeyboardHeight() method -

public int getKeyboardHeight() {
          final View rootview = this.getWindow().getDecorView();
           linearChatLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        rootview.getWindowVisibleDisplayFrame(r);
                        int screenHeight = rootview.getRootView().getHeight();
                        int newHeight = screenHeight - (r.bottom - r.top);
                        if (newHeight > heightOfKeyboard) {
                            heightOfKeyboard = screenHeight
                                    - (r.bottom - r.top);
                            // heightOfKeyboard = heightDiff;
                        }

                        Log.d("Keyboard Size", "Size: " + heightOfKeyboard);
                    }
                });
        return heightOfKeyboard;
    }

hideKeyboard() method -

private void hidekeyBoard() {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editChatBox.getWindowToken(), 0);
}

Inside onCreate() method -

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_new_layout);

   ArrayAdapter<String> chatQueAdapter = new ArrayAdapter<>(this,
            R.layout.chat_que_row, R.id.textChatQue, queArrays);
    myListView.setAdapter(chatQueAdapter);

        showKeyboard();
        heightOfKeyboard = getKeyboardHeight();
        hidekeyBoard();
        myListView.getLayoutParams().height = heightOfKeyboard;
        myListView.setVisibility(View.VISIBLE);
    }
5 Answers
Related