在android中是否有任何方法可以获得设备虚拟键盘的高度

临文乍了了,彻卷兀若无。这篇文章主要讲述在android中是否有任何方法可以获得设备虚拟键盘的高度相关的知识,希望能为你提供帮助。
android中是否有任何方法可以在运行时获取Android设备的虚拟键盘的高度。其实我想在键盘上方显示文本框。
答案是的,您可以在Viewtree Observer和全局布局侦听器的帮助下,尝试下面提到的步骤

  1. 获取布局的根视图
  2. 获取此根的Viewtree观察者,并在此基础上添加全局布局侦听器。
现在,无论何时显示软键盘,android都会重新调整屏幕大小,您将收到听众的电话。这就是你现在唯一需要做的就是计算你的根视图在重新调整大小和原始大小之后的高度之间的差异。如果差异超过150则认为这是因为键盘已经膨胀。
下面是一个示例代码
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){ public void onGlobalLayout(){ int heightDiff = root.getRootView().getHeight()- root.getHeight(); // IF height diff is more then 150, consider keyboard as visible. } });

此致,Techfist
另一答案为了解决这个问题,我编写了一个键盘高度提供器,可以计算浮动软键盘的高度。可以将Activity设置为在AndroidManifest.xml中调整None或adjustPan。
https://github.com/siebeprojects/samples-keyboardheight
希比
另一答案我为此尝试了许多建议的方法,但似乎没有一个适用于Android SDL。我认为这是因为SDL显示是“全屏”或者它位于“AbsoluteLayout”内,因此“视图”的高度从未实际改变。这个方法对我有用:
Getting the dimensions of the soft keyboard
mRootWindow = getWindow(); mRootView = mRootWindow.getDecorView().findViewById(android.R.id.content); mRootView.getViewTreeObserver().addOnGlobalLayoutListener( new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout(){ Rect r = new Rect(); View view = mRootWindow.getDecorView(); view.getWindowVisibleDisplayFrame(r); // r.left, r.top, r.right, r.bottom } });

另一答案将文本框作为父级底部。
android:layout_alignParentBottom="true"

并在清单文件中进行软输入adjustresize
android:windowSoftInputMode="adjustResize"

然后当键盘出现时,文本框将向上移动。
另一答案你不能说。不,真的:你根本说不出来。
键盘不需要是任何特定的形状。它不必放在屏幕的底部(many选项most popular的are not),它不必在更改文本字段时保持其当前大小(几乎没有依赖于标志)。它甚至不必是rectangular。它也可能只是接管entire screen。
(关于类似问题的答案副本,Getting the dimensions of the soft keyboard)
另一答案我创建了一个库项目获取android键盘高度,即使活动不使用adjustResize输入模式。
https://github.com/Crysis21/KeyboardHeightProvider
另一答案我的解决方案是上述所有解决方案的组合。这个解决方案也很hacky但解决了问题(至少对我来说)。
  1. 我在屏幕底部有透明背景的临时视图。
  2. 我已经在@bill建议的清单中的活动标签中添加了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} });
但无论如何要解决@ zeeshan0026问题只有一个标志在清单android:windowSoftInputMode="adjustResize"就足够了。
另一答案别再看了!我一直在寻找这个解决方案很长一段时间。经过几天尝试在SOF上提出的所有技巧,我找到了真正有效的完美解决方案。
这个GitHub项目以最佳方式展示了它:https://github.com/siebeprojects/samples-keyboardheight
玩得开心!
另一答案我已经用它在android中以编程方式获得键盘高度并进行了测试,请尝试一次:
myLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Override public void onGlobalLayout() { // TODO Auto-generated method stub Rect r = new Rect(); parent.getWindowVisibleDisplayFrame(r); int screenHeight = parent.getRootView().getHeight(); int heightDifference = screenHeight - (r.bottom - r.top); Log.d("Keyboard Size", "Size: " + heightDifference); //boolean visible = heightDiff > screenHeight / 3; } });

【在android中是否有任何方法可以获得设备虚拟键盘的高度】谢谢。

    推荐阅读