有没有什么办法在Android获得设备的虚拟键盘的高度

有没有什么办法可以让android在运行时获得android设备虚拟键盘的高度。 其实我想显示键盘上方的文本框。

是的,你可以在Viewtree Observer和全局布局监听器的帮助下,尝试下面提到的步骤

  1. 获取布局的根视图
  2. 获取这个根的Viewtree观察者,并在其上添加一个全局布局监听器。

现在每当显示软键盘时,android会重新调整屏幕大小,您将收到呼叫您的听众。 这就是你现在唯一需要做的就是计算你的根视图在重新resize后的高度与原始大小之间的差异。 如果差距超过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

我尝试了很多build议的方法,但没有一个可以用于Android SDL。 我认为这是因为SDL显示器是“全屏”,或者它位于“绝对布局”内,因此“视图”的高度实际上不会改变。 这个方法对我有用:

获取软键盘的尺寸

 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 } }); 

为了解决这个问题,我写了一个keyboardHeightProvider,它可以计算浮动软键盘的高度。 可以将Activity设置为在AndroidManifest.xml中调整无或adjustPan。

https://github.com/siebeprojects/samples-keyboardheight

希比

把文本框作为父母的底部。

 android:layout_alignParentBottom="true" 

并在清单文件中使软inputadjustresize

 android:windowSoftInputMode="adjustResize" 

那么文本框会在键盘出现时向上移动。

你不能告诉。 不,真的:你根本看不出来。

键盘不需要是任何特定的形状。 它不一定要放在屏幕的底部( 很多 最stream行的选项都不是 ),当你改变文本字段时,它不必保持当前的大小(几乎没有任何一个取决于标志)。 它甚至不必是矩形的 。 它也可能只是接pipe整个屏幕 。

(我的答案在类似问题上的副本, 获取软键盘的尺寸 )

我的解决scheme是所有上述解决scheme的组合。 这个解决scheme也是hacky,但解决问题(至less对我来说)。

  1. 屏幕底部有透明背景的临时视图。
  2. 我已经添加了android:windowSoftInputMode="adjustResize"标志清单中的活动标签像@ billbuild议。
  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"只有一个单一的标志就足够了。

不要再看了! 我一直在寻找这个很长的解决scheme。 经过几天尝试所有关于SOF的技巧,我发现了一个完美的解决scheme。

这个GitHub项目演示了它的最佳方式: https : //github.com/siebeprojects/samples-keyboardheight

玩的开心!