问题现象
上图展示的很清楚,在系统->日期和时间选项页面中,点击日期 Preference,左边的上一月显示都透出来了
修改历程
一开始觉得是 DatePick 系统控件出问题了吧,自己新建了android工程,同样的调用方式显示发现是正常的,这么说排除系统
控件的锅,上网找了一堆 DatePick 相关bug的文章,但都不是同样的bug。
开始尝试在 settings 中其它地方调用 DatePick 显示,发现也出现同样显示bug,找啊找,试啊试
最终定位到样式上,和 android:clipchildren 有关。
android:clipchildren 属性,clip 的原意为裁剪,clipchildren表示是否裁剪子View,当此属性的值为false时,
子View的大小可以超过父View的大小。所以就出现了上图的bug
解决办法
注释 Theme.Settings 样式中 android:clipChildren 属性
vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/themes.xml
<style name="Theme.Settings" parent="Theme.SettingsBase"> <item name="preferenceTheme">@style/PreferenceTheme</item> <item name="android:clipToPadding">false</item> + <!--remove clipChildren for fix DatePickerDialog show extend layout bug--> + <!-- <item name="android:clipChildren">false</item> --> <item name="android:listPreferredItemHeight">72dip</item> <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item> <item name="android:navigationBarColor">@android:color/transparent</item>