深度解析Android中字體設置

1、在Android XML文件中設置字體

可以採用Android:typeface,例如android:typeface=”monospace”。在這裏例子中我們在Activity中對android:text=”Hello, World! 您好”分別進行了四種顯示方式,依次爲“Sans”,“serif”,“monospace”和系統缺省方式(經試驗缺省採用採用sans)。英文字體有差異,貌似中文字體沒有差異。XML文件如下:

java代碼:

  1. <?xml version=”1.0″ encoding=”utf-8″?>
  2. <TableLayout … … android:stretchColumns = “1″>
  3. <TableRow>
  4. <TextView android:text=”sans:”
  5. android:layout_marginRight=”4px”
  6. android:textSize=”20sp” />
  7. <TextView android:text=”Hello, World! 您好”
  8. android:typeface =”sans” <!– android:typeface用於指定字體–>
  9. android:textSize=”20sp” />
  10. </TableRow>
  11. … …類同,依次設置兩個TableRow,分別將sans 修改爲serif,monospace … …
  12. <TableRow>
  13. <TextView android:text=”custom:” …. />
  14. <TextView android:id=”@+id/c12_custom”
  15. android:text=”Hello, World! 您好”
  16. android:textSize=”20sp” />
  17. </TableRow>
  18. </TableLayout>

2、使用其他字體

1)將新字體的TTF文件copy到assets/fonts/目錄下面,例如我們將“*.ttf”copy了過去。

2)我們需要將widget設置爲該字體,比較遺憾的是,不能直接在XML文件中進行,需要編寫源代碼。

java代碼:

  1. TextView tv = (TextView)findViewById(R.id.c12_custom);
  2. //從assert中獲取有資源,獲得app的assert,採用getAserts(),通過給出在assert/下面的相對路徑。在實際使用中,字體庫可能存在於SD卡上,可以採用createFromFile()來替代createFromAsset。
  3. Typeface face = Typeface.createFromAsset (getAssets() , “fonts/timesi.ttf” );
  4. tv.setTypeface (face);

我在模擬器中先後導入華文行楷的字體,大約4M,但是系統無法識別出該字體,沒有顯示,然後嘗試使用英文字體timesi.ttf,正常。因此Android並非和所有的TTF字體都能兼容,尤其在中文特殊字體的支持會存在問題,對於不兼容的字體,Android不出報錯,只是無法正常顯示。一般而言我們都會使用系統缺省提供的字體。
對於華文行楷字體,我們一開始使用的文件是中文名字,出現報錯,後來我們將之改爲全小寫的英文名稱就不會出錯,所以在文件命名上需要注意。

3、一些注意

使用其他字庫,都會消耗程序的空間,這是要非常注意的。而且這些字庫有時並不能完全提供你所需要的文字。
舉個例子,省略方式。當文字太多的時候,可以通過省略號省略後面的內容,省略號是使用“…”作爲一個字體,可通過android:ellipsize屬性進行設置。如果我們需要使用省略功能,需要確保字體具有省略號。此外,爲了保證長度的一直,Android會進行填充處理,除了將一個字符更換爲省略符合外,後面的字符將更換爲一個特殊的Unicode字符,‘ZERO WIDTH NO-BREAK SPACE’ (U+FEFF)。這個字符並佔用任何可視的位置,但是保障了string具有同樣的長度。不是所有的字體都支持這個特殊的字符,可能會引發一些亂碼現象。

 

 

 

文章出處:http://mobile.51cto.com/android-265238.htm

 

 

☞ 溫馨提示: 返回我的博客索引

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章