gpt4 book ai didi

java - IME 的自定义 Android View 的一部分被切断?

转载 作者:行者123 更新时间:2023-12-01 13:09:09 26 4
gpt4 key购买 nike

我正在开发适用于 Android 的输入法,为此我创建了一个自定义 View 。

我正在 XML 文件中设置 View ,如下所示:

<com.paldepind.mykeyboard.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>

我希望 View 为屏幕高度的 40%。因此,在我的自定义 View 中,我重写了 View 具有的 onMeasure 方法:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = (int) (View.MeasureSpec.getSize(heightMeasureSpec) * .4);
setMeasuredDimension(widthMeasureSpec,
View.MeasureSpec.makeMeasureSpec(height,
View.MeasureSpec.EXACTLY));
}

在手机上查看时, View 正确地从屏幕向下 60% 的位置开始,但随后又被进一步向下截断,如下面的屏幕截图所示。

Android screenshot

如果我将上面代码中的 .4 更改为 1,那么 View 确实会按预期填满整个屏幕。看来数字越低,视野被遮挡的越多。

我真的不明白为什么这行不通。非常感谢任何帮助!

最佳答案

似乎 onMeasure 方法由于某种原因被调用了两次。第一次 heightMeasureSpec 参数等于屏幕尺寸,第二次该参数设置为之前设置的 View 高度。因此, View 最终仅为屏幕尺寸 40% 的 40%。

我通过在 onMeasure 方法调用中专门获取屏幕尺寸解决了该问题:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int height = (int) (size.y * .4);
setMeasuredDimension(widthMeasureSpec,
View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY));
}

关于java - IME 的自定义 Android View 的一部分被切断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23031095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com