首先看一看本来的需要的样子:
时间选择器是一个三排的自定义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>