Android中給TextView字體大小用dp仍是sp?dp和sp有什麼區別?老年機字體被放大了怎麼辦?

dp,sp都會根據屏幕ppi顯示大小不一樣。

ppi的運算方式是:android

PPI = (開根號(長度像素數² + 寬度像素數²)) / 屏幕對角線英寸數app

dp:Density-independent pixels,以160PPI屏幕爲標準,則1dp=1px,字體

dp和px的換算公式 :
dp*ppi/160 = px。好比1dp x 320ppi/160 = 2px。spa

sp:Scale-independent pixels,它是安卓的字體單位,以160PPI屏幕爲標準,當字體大小爲 100%時, 1sp=1px。code

sp 與 px 的換算公式:sp*ppi/160 = pxorm

因此dp = sp?

注意sp的特色是能隨系統而變化。
問題來了,在我開發過程當中,遇到了Android老年機,對!有種機器是老年機專用,手機的默認字號都比較大,因此致使APP中的各個地方文字都由於字體太大而顯示不全。
將手機拿來,設置中把系統文字大小修改成標準後,問題解決了。
可是,咱們沒法強制老年人爲了這個APP而將系統字體大小都改爲標準吧?xml

對應策略:

若是須要固定字體大小顯示的,只有用dp單位了,這個dp單位單純和ppi掛鉤,不跟隨系統字體大小變化。開發

<TextView
  ...
  android:textSize="15dp" 
  ...
/>

若是不用固定字體大小,可是想要在各個控件都顯示全的話,那麼就用自適應字體大小的方式吧,代碼以下:it

<TextView
  ...
  app:autoSizeTextType="uniform"
  android:lines="1"
  app:autoSizeMinTextSize="1sp"
  android:textSize="15sp" 
  ...
/>

注意:autoSizeTextType和autoSizeMinTextSize的Schema是【xmlns:app="http://schemas.android.com/apk/res-auto"】提供的,而不是默認的Android,不然Android8.0版本下會不支持。

相關文章
相關標籤/搜索