我正在开发一款适用于Android的IME,为此我创建了一个自定义视图。
我在这样的XML文件中设置视图:
<com.paldepind.mykeyboard.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
我希望视图占屏幕高度的40%。因此,在我的自定义视图中,我覆盖了视图具有的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));
}
在手机上观看时,视图在屏幕上正确开始降低60% - 但它会被进一步向下切断,如下面的屏幕截图所示。
如果我将上面代码中的.4
更改为1
,则视图会按预期填满整个屏幕。似乎数字越低,视图被切断的越多。
我真的无法弄清楚为什么这不起作用。非常感谢任何帮助!
答案 0 :(得分:1)
似乎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));
}
答案 1 :(得分:0)
尝试将键盘视图放在相对布局中。也许可以解决它。