Android中通過typeface設定字型

2021-07-12 02:43:51 字數 3503 閱讀 9559

android

系統預設支援三種字型,分別為:

sans」,

「serif」,

「monospace"

,一般預設值是sans,除此之外還可以使用其他字型檔案(*.ttf)。

英文本型有差異,貌似中文字型沒有差異。

一、使用預設字型

效果圖:

二、使用其他字型

很多時候預設的三個字型沒法滿足我們的需求,就會使用其他字型。android支援ttf格式的字型。

1)將新字型的ttf檔案copy到assets/fonts/目錄下面,例如我們將「*.ttf」copy了過去。

2)我們需要將widget設定為該字型,比較遺憾的是,不能直接在xml檔案中進行,需要編寫源**。

textview =(textview) findviewbyid(r.id.custom);

//在實際使用中,字型庫可能存在於sd卡上,可以採用createfromfile()來替代createfromasset。

typeface typeface =typeface.createfromasset(getassets(), "fonts/huawen.ttf");

string path =environment.getexternalstoragedirectory().getabsolutefile() + file.separator + "***.ttf";

//typeface typeface2 =typeface.createfromfile(path);

textview.settypeface(typeface);

textview textview1 =(textview) findviewbyid(r.id.custom1);

typeface typeface3 =typeface.createfromasset(getassets(), "fonts/timesi.ttf");

textview1.settypeface(typeface3);

效果圖:

對於華文行楷字型,我們一開始使用的檔案是中文名字,出現報錯,後來我們將之改為全小寫的英文名稱就不會出錯,所以在檔案命名上需要注意。

我先後匯入華文行楷的字型,大約4m,但是系統無法識別出該字型,沒有顯示,然後嘗試使用英文本型timesi.ttf,正常。因此android並非和所有的ttf字型都能相容,尤其在中文特殊字型的支援會存在問題,對於不相容的字型,android不出報錯,只是無法正常顯示。一般而言我們都會使用系統預設提供的字型。

對於使用其他字型,android提供了幾個api,這裡介紹下:

typeface是字型類

這個模擬較簡單,這裡列出它的成員方法(這些方法都是靜態方法,返回typeface物件,可以直接作為settypeface的引數):

·static typefacecreate(typeface family, int style)  //靜態方法,引數一為字型型別這裡是typeface的靜態定義,如宋體,引數二風格,如粗體,斜體

·static typefacecreate(string familyname, int style)  //靜態方法,引數一為字型名的字串,引數二為風格同上,這裡我們推薦使用上面的方法。

·static typefacecreatefromasset(assetmanager mgr, string path)  //靜態方法,引數一為assetmanager物件,主要用於從apk的assets資料夾中取出字型,引數二為相對於android工程下的assets資料夾中的外掛程式字型檔案的路徑。

·static typefacecreatefromfile(file path)  //靜態方法,從檔案系統構造乙個字型,這裡引數可以是sdcard中的某個字型檔案

·static typefacecreatefromfile(string path)  //靜態方法,從指定路徑中構造字型

·static typefacedefaultfromstyle(int style) //靜態方法,返回預設的字型風格

本類的常量靜態定義,首先為字型型別名稱

型別typeface : default  、default_bold、 monospace、sans_serif、 serif

字型風格名稱

int bold  、 bold_italic  、 italic、normal

這些變數都可以通過名稱知道其意思

例子:

typeface.create(typeface.sans_serif, typeface.bold_italic);

typeface.create(typeface.monospace, typeface.italic);

typeface.create("sans", typeface.italic);

typeface.createfromasset(getassets(), "fonts/huawen.ttf");

string path =environment.getexternalstoragedirectory().getabsolutefile() + file.separator + "***.ttf";

typeface.createfromfile(path);

三、一些注意:使用其他字型檔,都會消耗程式的空間,這是要非常注意的。而且這些字型檔有時並不能完全提供你所需要的文字。

當文字太多的時候,可以通過省略號省略後面的內容,省略號是使用「…」作為乙個字型,可通過android:ellipsize屬性進行設定。

如果我們需要使用省略功能,需要確保字型具有省略號。此外,為了保證長度的一直,android會進行填充處理,除了將乙個字元更換為省略符合外,後面的字元將更換為乙個特殊的unicode字元,『zero width no-break space』 (u+feff)。這個字元並占用任何可視的位置,但是保障了string具有同樣的長度。不是所有的字型都支援這個特殊的字元,可能會引發一些亂碼現象。

解決的方法也很簡單,編輯字型檔案,把u+feff這個字元的寬度設為0。

Android中通過反射獲取資源Id

在將自己寫的工具打成.jar包的時候,有時候會需要引用到res中的資源,這時候不能將資源一起打包,只能通過反射機制動態的獲取資源.特別用在自己定義乙個工具將其打成.jar包時,特別注意資源的獲取 1 封裝成乙個工具類 package com.cp.utils import android.conte...

Android中通過反射獲取資源Id

在將自己寫的工具打成.jar包的時候,有時候會需要引用到res中的資源,這時候不能將資源一起打包,只能通過反射機制動態的獲取資源.特別用在自己定義乙個工具將其打成.jar包時,特別注意資源的獲取 1 封裝成乙個工具類 package com.cp.utils import android.conte...

android開發中,通過adb抓取log資訊

開發過程中,需要根據除錯列印資訊,來判斷問題出在那個地方,以便於解決問題,使用adb相關的一些指令,可以獲取除錯列印資訊 如下 1,輸入 adb shell dmesg c log dmesg.txt 回車後自動儲存到c盤 2,輸入 adb shell logcat c logcat.txt 回車後...