获取Android中虚拟键盘的高度

我怎样才能得到Android的虚拟键盘的高度? 可能吗?

我试图从主窗口中获得它,但它给了我全部的应用程序的高度。 但我想获得键盘高度。

Solutions Collecting From Web of "获取Android中虚拟键盘的高度"

你无法获得键盘的高度,但是你可以得到你的视图的高度,这是你真正想要的 – 你会得到这个数据提供给o​​nLayout调用到当前视图。

你可以使用这个示例代码。 这是肮脏的解决scheme,但它的作品

Thread t = new Thread(){ public void run() { int y = mainScreenView.getHeight()-2; int x = 10; int counter = 0; int height = y; while (true){ final MotionEvent m = MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, INTERNAL_POINTER_META_STATE); final MotionEvent m1 = MotionEvent.obtain( SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, INTERNAL_POINTER_META_STATE); boolean pointer_on_softkeyboard = false; try { getSingletonInstrumentation().sendPointerSync(m); getSingletonInstrumentation().sendPointerSync(m1); } catch (SecurityException e) { pointer_on_softkeyboard = true; } if (!pointer_on_softkeyboard){ if (y == height){ if (counter++ < 100){ Thread.yield(); continue; } } else if (y > 0){ softkeyboard_height = mainScreenView.getHeight() - y; } break; } y--; } if (softkeyboard_height > 0 ){ // it is calculated and saved in softkeyboard_height } else { calculated_keyboard_height = false; } } }; t.start(); 

这个解决scheme也是hacky,但解决问题(至less对我来说)。

  1. 屏幕底部有透明背景的临时视图。 所以这个观点是不可见的。
  2. 我在清单中的activity标记中添加了android:windowSoftInputMode="adjustResize"标志。
  3. 现在主要的故事在onGlobalLayout() 。 在那里,我计算了临时视图的y轴和根视图的高度之间的差异

    final View view = findViewById(R.id.base); view.getViewTreeObserver()。addOnGlobalLayoutListener(new OnGlobalLayoutListener(){

     @Override public void onGlobalLayout() { int rootViewHeight = view.getRootView().getHeight(); View tv = findViewById(R.id.temp_view); int location[] = new int[2]; tv.getLocationOnScreen(location); int height = (int) (location[1] + tv.getMeasuredHeight()); deff = rootViewHeight - height; // deff is the height of soft keyboard } 

    });

如果你不想在你的应用程序中使用android:windowSoftInputMode="adjustResize" 。 你可以尝试这样的事情:

  any_view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int height = main_layout.getHeight(); Log.w("Foo", String.format("layout height: %d", height)); Rect r = new Rect(); main_layout.getWindowVisibleDisplayFrame(r); int visible = r.bottom - r.top; Log.w("Foo", String.format("visible height: %d", visible)); Log.w("Foo", String.format("keyboard height: %d", height - visible)); } }); 

尝试这个

 KeyboardView keyboardView = new KeyboardView(getApplicationContext(), null); int height = (keyboardView.getKeyboard()).getHeight(); Toast.makeText(getApplicationContext(), height+"", Toast.LENGTH_LONG).show();