A. [android][canvas中drawText繪制文字垂直方向居中]
由於要實現類似注冊表單一樣,文字作用兩端對齊的效果如下圖1,所以才有下面的內容。悄信
在canvas中,調用drawText繪畫文隱運困字的時候,希望能夠在垂直方向居中畫出文字。所以需要測量出要繪畫的文字的高。但具體來說,也不是獲取文字的高,因為如果要垂直居中畫出文字,就必須拿到文字的baseline,於是在網上搜索,找到了一篇關於獲取baseline的文章(文章鏈接在本文底部列出),感覺就是我想要的,但是基於要懷疑一切的態度,不能你說是什麼就是什麼的,實踐才是檢驗真理的唯一標准,所以下面我們來驗證一下幾個觀點。
首先可以明確,5個位置分別是灶念top,ascent,baseline,descent,bottom。這五個位置受字型大小的大小影響是毋庸置疑的,這里不再討論。這里驗證了一下字體對五個位置的影響。字型大小默認是16,字體分別是系統默認,行書,小篆,方正姚體:
這5個位置分別用5條不同顏色的橫線條展示
從效果看,字體對top,ascent,baseline,descent,bottom的位置影響並不明顯。
通過Log列印的日誌可以得出結果
結果:以baseline為基準線,向上為負,向下為正是正確的。
這個不是驗證了,說了那麼多也就是為了如何在垂直方向居中繪制文字,關鍵在於獲取baseline位置。Canvas中的drawText中繪制文字的基準線是baseline。
使得ascent到View的是上邊距與descent到View下邊距距離一致即可,此段距離加上ascent的絕對值(-ascent)即為baseline的位置。
在Canvas中使用drawText繪制垂直居中文字的關鍵在於求出baseline的位置。獲取位置的公式:
https://github.com/lgygg/MeasureHeight
http://blog.csdn.net/su1216/article/details/46900617#
B. Android文字圖片無法居中對齊的三個解決方法
在一些項目中會碰到文字和圖片無法居中,即使採用flex或絕對定位(top:-50%, tranform:translateY(50%)仍然無法解決。
這個問題的根本原擾改因在於Android對大部分的非sans-serif字體支持不友好,如Helvetica,導致文字在組件內部(如span,label)就不居中。
文字在組件內部都不居中了,自然在外面怎麼處理都是無法對齊了。
但是sans-serif和helvetica字體的顏色是不一樣的,所以困困可以增加一個透明度opacity為0.8會比較接近helvetica了緩尺判,故最終的方案是
Android瀏覽器下line-height垂直居中為什麼會偏離? - 周祺的回答 - 知乎
C. android中textview控制項中的文字的位置是如何調整
有2種方法可以設置TextView文字居中:x0dx0a一:在xml文件設置:android:gravity="center"x0dx0a二:在程序中設置:m_TxtTitle.setGravity(Gravity.CENTER);x0dx0ax0dx0a備註:android:gravity和android:layout_gravity的區別在於前者對控制項內部操作,後者是對整個控制項操作。x0dx0a例如:x0dx0aandroid:gravity="center"是對textView中文字居中x0dx0aandroid:layout_gravity="center"是對textview控制項在整個布局中居中x0dx0a其實很容易理解簡念,出現"layout"就是控制項對整個布局的操作x0dx0ax0dx0aTextView文字垂直攔悉困靠左居中,x0dx0ax0dx0a設置android:gravity="center_vertical|left"。x0dx0ax0dx0aandroid:gravity="center", 垂直水平居中x0dx0aLinearLayout有兩個非常相似的屬性:android:gravity與android:layout_gravity。他們的區別陸行在於:android:gravity用於設置View組件的對齊方式,而android:layout_gravity用於設置Container組件的對齊方式。x0dx0a舉個例子,我們可以通過設置android:gravity="center"來讓EditText中的文字在EditText組件中居中顯示;同時我們設置EditText的android:layout_gravity="right"來讓EditText組件在LinearLayout中居中顯示。x0dx0a