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版本下会不支持。

相关文章
相关标签/搜索