临文乍了了,彻卷兀若无。这篇文章主要讲述在android中是否有任何方法可以获得设备虚拟键盘的高度相关的知识,希望能为你提供帮助。
android中是否有任何方法可以在运行时获取Android设备的虚拟键盘的高度。其实我想在键盘上方显示文本框。
答案是的,您可以在Viewtree Observer和全局布局侦听器的帮助下,尝试下面提到的步骤
- 获取布局的根视图
- 获取此根的Viewtree观察者,并在此基础上添加全局布局侦听器。
下面是一个示例代码
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但解决了问题(至少对我来说)。
- 我在屏幕底部有透明背景的临时视图。
- 我已经在@bill建议的清单中的活动标签中添加了
android:windowSoftInputMode="adjustResize"
标志。 - 现在的主要故事是在
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"
就足够了。另一答案别再看了!我一直在寻找这个解决方案很长一段时间。经过几天尝试在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中是否有任何方法可以获得设备虚拟键盘的高度】谢谢。
推荐阅读
- 如何在Android应用程序中添加垂直滚动条( [关闭])
- 使用Gitlab CI生成Android构建
- 在android模拟器中禁用menubutton
- Android Studio 3.2“找不到目标设备”
- InfoWindow中的Android Google地图摘要自动更新
- Android操作系统上的启动器
- 通过sql server express将Android应用程序连接到sql server
- 更新后Android Studio 3.3到3.4 AAPT2生成错误
- 错误Appstore连接(Info.plist文件中缺少目的字符串)