Java IME自定义Android视图的一部分被切断?

Java IME自定义Android视图的一部分被切断?,java,android,android-custom-view,ime,Java,Android,Android Custom View,Ime,我正在为Android开发输入法,为此我创建了一个自定义视图 我在XML文件中设置视图,如下所示: <com.paldepind.mykeyboard.KeyboardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" /> 当在手机上观看

我正在为Android开发输入法,为此我创建了一个自定义视图

我在XML文件中设置视图,如下所示:

<com.paldepind.mykeyboard.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
/>
当在手机上观看时,屏幕上的视图正确地从60%向下开始,但它会被进一步向下截断,如下面的屏幕截图所示

但是,如果我将上面代码中的
.4
更改为仅
1
,则视图会按预期填充整个屏幕。似乎数字越低,被切断的视图就越多


我真的不明白为什么这样不行。非常感谢您的帮助

尝试将键盘视图放在相对布局内。也许可以解决它。

似乎出于某种原因,begin调用了两次
onMeasure
方法。第一次
heightMeasureSpec
参数等于屏幕大小,第二次该参数设置为视图之前设置的高度。因此,最终视图仅比屏幕大小的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));
}
@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));
}