android 8.0自定义view高度问题

首先看一看本来的需要的样子:

时间选择器是一个三排的自定义view,在android 8.0之前的机器上一直没毛病,升级到8.0之后,效果就成下面这样了:

就变成只有一行了。

时间选择器自定义view的其中两个属性如下

        <item name="android:layout_height">60dp</item>
        <item name="unitHeight">48dp</item>

控件高度60dp,每一单元行的高度48dp,这样一看的话,根本放不下三行,但是自定义view的实际高度其实是在代码里面算出来的:

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		controlWidth = getWidth();
		if (controlWidth != 0) {
			setMeasuredDimension(getWidth(), itemNumber * unitHeight);
			controlWidth = getWidth();
		}
	}

其中itemNumber就是3,unitHeight就是设定的48dp,算下来实际高度为144dp。

问题就出在这里,在android 8.0之前,实际高度是java代码算出来的144dp,而android 8.0之后,以xml中设定的android:layout_height属性为准。

解决方案就是在xml设置高度大一点就行了:

        <item name="android:layout_height">150dp</item>
        <item name="unitHeight">48dp</item>



猜你喜欢

转载自blog.csdn.net/yu75567218/article/details/79622537
今日推荐