首頁>技術>

前言

在app實際生產開發中,字型適配是一個繞不開的話題,測試總是會用各種系統字型大小試一遍看著不舒服就給你丟一個bug,說這個頁面適配有問題,不是字型太大就是自卑遮住了,顯示不全。然後自己百度了一下解決方法,總結以下幾種簡單的解決方案。

場景一

場景一

測試人員在測試過程中經常能遇到文字顯示不全的場景,而測試有需要我們顯示所有資訊,不能有省略號和遮擋,可是空間就這麼點,又不像ios一樣文字顯示不下就會自動縮小,這時候該怎麼辦呢?以前的做法一般是測量TextView文字所佔的寬度與TextView控制元件的寬度對比,動態改變TextView的字型大小,寫起來即麻煩又耗效能。但是現在不用這麼麻煩了,Android 8.0 新增了用來動態改變TextView字型大小的新特性 Autosizing TextViews,只需要簡單設定一下屬性即可。

例如上圖中符合需求的效果可以這樣寫:

可以看到TextView控制元件多了如下屬性:

autoSizeTextType:設定TextView是否支援自動改變字型大小,none表示不支援,uniform表示支援。autoSizeMinTextSize:最小字型大小,例如設定為10sp,表示文字最多隻能縮小到10sp。autoSizeMaxTextSize:最大字型大小,例如設定為18sp,表示文字最多隻能放大到18sp。autoSizeStepGranularity:縮放粒度,即每次字型大小變化的數值,例如設定為1sp,表示每次縮小或放大的值為1sp。

上面的只是針對於8.0的裝置有效,如果想要相容8.0以下裝置,則需要用AppCompatTextView代替TextView,並且上面幾個屬性的名稱空間需要用app名稱空間。如下:

肯定很多人說 “為什麼自己寫的時候不用AppCompatTextView也能相容8.0以下裝置呢?”,那是因為你當前的xml檔案對應的Activity繼承的是AppCompatActivity,如果繼承的是Activity或FragmentActivity是不能達到相容的。這一點其實官方文件 Autosizing TextViews 也沒有說清楚,導致很多人誤解了,各位可以自己驗證下。

場景二

不希望字型大小隨著系統的字型大小改變而改變

解決方案

xml

一般字型大小用的單位都是sp,這個會隨著系統而更改,可以將字型大小的單位改為dp,這樣就不會變了

動態編碼方式

字型大小是否隨系統改變可以通過Configuration類的fontScale變數來控制,fontScale變數預設為1,表示字型大小不隨系統字型大小的改變而改變,那麼我們只需要保證fontScale始終為1即可。具體程式碼如下,一般放在Activity的基類BaseActivity即可。

雖然兩種方式都可以解決場景二的問題,但是一般都是使用動態編碼方式,原因如下:

2. 若需求改成字型大小需要隨系統字型大小的改變而改變,只需要刪掉該段程式碼即可。

3. 官方推薦使用sp作為字型單位。

  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Visvis是一個被忽視的Python視覺庫的基本介紹和講解