有没有什么办法在Android获得设备的虚拟键盘的高度
有没有什么办法可以让android在运行时获得android设备虚拟键盘的高度。 其实我想显示键盘上方的文本框。
是的,你可以在Viewtree Observer和全局布局监听器的帮助下,尝试下面提到的步骤
- 获取布局的根视图
- 获取这个根的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对我来说)。
- 屏幕底部有透明背景的临时视图。
- 我已经添加了
android:windowSoftInputMode="adjustResize"
标志清单中的活动标签像@ billbuild议。 -
现在主要的故事在
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
玩的开心!