這特么是一個(gè)坑。
一個(gè)ImageView放在RelativeLayout中,給RelativeLayout設(shè)置android:gravity="center_vertical發(fā)現(xiàn)并沒(méi)有垂直居中,歪了一點(diǎn)點(diǎn)。而直接給ImageView設(shè)置android:layout_centerVertical="true"就正好。
用ImageView的getTop()和getBottom()探索過(guò)程不提了,直接說(shuō)結(jié)果:
首先我ImageView的資源文件高度為28px;
當(dāng)沒(méi)有設(shè)置drawable-hdpi,圖片資源只放在了drawable-xhdpi里,而設(shè)備是240dpi的時(shí)候,hdpi里找不到,就去xhdpi里找了,找到后顯示在屏幕上會(huì)縮放0.75倍,變成21px;區(qū)別就在這兒了。
比如RelativeLayout的高度是80px;
android:layout_centerVertical="true"是設(shè)置給ImageView的,會(huì)測(cè)量好ImageView的實(shí)際高度得到21px,然后垂直居中就是距離頂部(80-21)/2=29。
而android:gravity="center_vertical是設(shè)置給RelativeLayout的,他還是按照源資源大小給你計(jì)算(80-28)/2 = 26;距離父控件的距離是26px。
就是這3個(gè)像素讓我看出來(lái)“歪了”。
解決辦法有2個(gè):
1、現(xiàn)在mdpi的設(shè)備不多了。。但hdpi還是有一些的,該為他們弄一套圖還是專門弄一套圖吧。
2、LinearLayout的android:gravity="center_vertical是準(zhǔn)的,RelativeLayout既然不準(zhǔn),那就還是用android:layout_centerVertical="true"靠譜。