【Android初級】使用TypeFace設定TextView的文字字型(附原始碼)

snowyeti發表於2021-01-26

在Android裡面設定一個TextView的文字顏色和文字大小,都很簡單,也是一個常用的基本功能。但很少有設定文字字型的,今天要分享的是通過TypeFace去設定TextView的文字字型,佈局裡面有兩個Button,總共包含兩個小功能:換字型和變大

功能的核心部分主要是兩點:

  1. 建立assets外部資原始檔夾,將ttf格式的字型檔案放在該目錄下
  2. 通過TypeFace類的createFromAsset方法,讓TextView通過setTypeFace來改變字型

完整原始碼如下:

`import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.memorydemo.R;

public class ChangeFontActivity extends Activity implements View.OnClickListener {
private TextView textViewFont;
@Override
protected void onCreate(Bundle onSavedInstance) {
super.onCreate(onSavedInstance);
setContentView(R.layout.change_textview_font);

textViewFont = findViewById(R.id.textViewFont);
Button btnChangeFont = findViewById(R.id.buttonChangeFont);
Button btnAmplify = findViewById(R.id.buttonAmplify);
btnChangeFont.setOnClickListener(this);
btnAmplify.setOnClickListener(this);

}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.buttonChangeFont:

        // 這裡我是從Android framework目錄下隨便挑了一種字型
        textViewFont.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/BitMDL2.ttf"));

        // 直接將 ttf 檔案放在 assets 目錄下也是可以的
        // textViewFont.setTypeface(Typeface.createFromAsset(getAssets(), "BitMDL2.ttf"));
        break;

    case R.id.buttonAmplify:
        // 佈局裡面預設大小是 12 SP,這裡將字型大小設定為 24 SP,方便看效果
        textViewFont.setTextSize(24);
        break;

    default:
        break;
}

}`

字型檔案的存放目錄結構如下(ttf字型檔案既可以直接放在assets目錄,也可以在assets下新建一層目錄,比如我建了一層 fonts目錄):

2、佈局檔案change_textview_font.xml

3、效果圖如下(先點選變大、再更換字型):

關於Android的字型,有以下兩點要注意:

  1. 字型檔案必須是ttf(True Type Font)格式,否則,即使程式編譯時不出錯,在執行時也會發生無法更改字型的情況
  2. 目前Android在支援字型檔案時還有些問題,即使用了不支援的字型,Android也不會發生錯誤,而是以預設字型 Droid Sans 替換。所以大家如果遇到使用外部字型卻發現沒變化時,問題就出在Android不支援該字型,而非程式錯誤

本功能裡面使用了外部字型,也可以通過呼叫Typeface的靜態方法defaultFromStyle,使用原生字型,它有以下常量,都是int型別:

  • BOLD
  • BOLD_ITALIC
  • DEFAULT
  • DEFAULT_BOLD
  • ITALIC
  • MONOSPACE
  • NORMAL
  • SANS_SERIF
  • SERIF

大家有興趣可以自己測試下這些字型對應的效果。

相關文章