我知道我可以使用“android:windowSoftInputMode =”adjustPan“做一些自动偏移。但我真的想要获得软件键盘高度以达到特殊目的。
我发现这里有一个类似的话题:Getting the dimensions of the soft keyboard。但显然,这不是一个通用的解决方案。
是否有通用方法或内置方法来获得软键盘高度? (或者如何获得当前光标位置和软件键盘顶部位置之间的偏移值?)
非常感谢
答案 0 :(得分:1)
在Xamarin.Android中获取软键盘高度,使用ViewTreeObserver.IOnGlobalLayoutListener监听GlobalLayout Change事件并计算前后根视图中的变化差异,以获得键盘的高度。您可以在Native Android Code中执行类似的操作。
这是代码:
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
public static Android.Views.View RootView = null;
public void DetectSoftKeyboardHeight()
{
RootView = this.FindViewById(Android.Resource.Id.Content);
if(RootView!=null)
RootView.ViewTreeObserver.AddOnGlobalLayoutListener(new MyLayoutListener());
}
}
/// <summary>
/// My layout listener.
/// Detect Android Soft keyboard height
/// </summary>
public class MyLayoutListener : Java.Lang.Object, ViewTreeObserver.IOnGlobalLayoutListener
{
public void OnGlobalLayout()
{
// do stuff here
Android.Graphics.Rect r = new Android.Graphics.Rect();
if (Mobibranch.Droid.MainActivity.RootView != null)
{
Mobibranch.Droid.MainActivity.RootView.GetWindowVisibleDisplayFrame(r);
int screenHeight = Mobibranch.Droid.MainActivity.RootView.RootView.Height;
int keyboardHeight = screenHeight - (r.Bottom);
if (keyboardHeight > 0)
{
//Keyboard is up on screen
Android.Util.Log.Verbose("[[[[MyLayoutListener]]]]", "Keyboard is up on screen, Height: "+keyboardHeight);
}
else
{
//Keyboard is hidden
}
}
}
}
答案 1 :(得分:0)
在这里,我的解决方案,它也是hacky但解决问题。
android:windowSoftInputMode="adjustResize"
标记,如@bill建议。现在主要故事在onGlobalLayout()
。我计算了y axis
临时视图和root view
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
}
});