Android8.1系統(tǒng)字體

需求:替換系統(tǒng)字體

分析:

過程:frameworks/base/data/fonts/fonts.xml

? ??????????external/roboto-fonts/

????? ??????noto-fonts/other/



關(guān)于字體上層主要在?

frameworks/base/graphics/java/android/graphics/Typeface.java

static {

final ArrayMap systemFontMap =new ArrayMap<>();

final ArrayMap systemFallbackMap =new ArrayMap<>();

buildSystemFallback("/system/etc/fonts.xml","/system/fonts/", systemFontMap,

systemFallbackMap);

sSystemFontMap = Collections.unmodifiableMap(systemFontMap);

sSystemFallbackMap = Collections.unmodifiableMap(systemFallbackMap);

setDefault(sSystemFontMap.get(DEFAULT_FAMILY));

// Set up defaults and typefaces exposed in public API

? ? DEFAULT? ? ? ? =create((String)null,0);

DEFAULT_BOLD? ? =create((String)null, Typeface.BOLD);

SANS_SERIF? ? ? =create("sans-serif",0);

SERIF? ? ? ? ? =create("serif",0);

MONOSPACE? ? ? =create("monospace",0);

sDefaults =new Typeface[] {

DEFAULT,

DEFAULT_BOLD,

create((String)null, Typeface.ITALIC),

create((String)null, Typeface.BOLD_ITALIC),

};

}

static代碼塊 是系統(tǒng)typeface的初始化

DEFAULT 、DEFAULT_BOLD 苔可、SANS_SERIF嚣潜、SERIF旁钧、MONOSPACE

因?yàn)镈EFAULT_FAMILY ="sans-serif"? 所以DEFAULT =?SANS_SERIF? ??DEFAULT_BOLD =?SANS_SERIF + BOLD

所以先介紹下三種familyName的含義

sans-serif:區(qū)別于“serif”何陆,沒有"筆鋒",筆畫粗細(xì)也基本差不多

serif:帶“筆鋒”雾袱,而且根據(jù)橫豎斜的寬度也不一樣

monospace:打印用字體翩剪,屬于“sans-serif”,每個字母等間距


其次介紹下"font-weight"祟偷,

weight指的是粗細(xì)”

那么默認(rèn)的weight是多少察滑?


===>>>Typeface.java?

create(null,0);

nativeCreateFromTypeface(ni, style)

===>>>Typeface.cpp

frameworks/base/core/jni/android/graphics/Typeface.cpp

Typeface* face = Typeface::createRelative(family, (SkTypeface::Style)style);

===>>>Typeface.cpp

frameworks/base/libs/hwui/hwui/Typeface.cpp

Typeface* Typeface::createRelative(Typeface* src, SkTypeface::Style style) {

? ? Typeface* resolvedFace = Typeface::resolveDefault(src);

Typeface* hwTypeface = new Typeface();

? ? hwTypeface->fFontCollection = collection;

? ? hwTypeface->fSkiaStyle = SkTypeface::kNormal;

? ? hwTypeface->fBaseWeight = SkFontStyle::kNormal_Weight;

? ? hwTypeface->fStyle = minikin::FontStyle(4 /* weight */, false /* italic */);

? ? Typeface::setDefault(hwTypeface);

===>>>SkFontStyle.h

external/skia/include/core/SkFontStyle.h

enum Weight {

? ? ? ? kInvisible_Weight? =? ? 0,

? ? ? ? kThin_Weight? ? ? ? =? 100,

? ? ? ? kExtraLight_Weight? =? 200,

? ? ? ? kLight_Weight? ? ? =? 300,

? ? ? ? kNormal_Weight? ? ? =? 400,

? ? ? ? kMedium_Weight? ? ? =? 500,

? ? ? ? kSemiBold_Weight? ? =? 600,

? ? ? ? kBold_Weight? ? ? ? =? 700,

? ? ? ? kExtraBold_Weight? =? 800,

? ? ? ? kBlack_Weight? ? ? =? 900,

? ? ? ? kExtraBlack_Weight? = 1000,

? ? };


所以默認(rèn)的weight是400

再根據(jù)frameworks/base/data/fonts/fonts.mk? ? 找到Roboto-Regular.ttf? 才是默認(rèn)的自體文件

<family name="sans-serif">

? ? ? ? <font weight="100" style="normal">Roboto-Thin.ttf</font>

? ? ? ? <font weight="100" style="italic">Roboto-ThinItalic.ttf</font>

? ? ? ? <font weight="300" style="normal">Roboto-Light.ttf</font>

? ? ? ? <font weight="300" style="italic">Roboto-LightItalic.ttf</font>

? ? ? ? <font weight="400" style="normal">Roboto-Regular.ttf</font>

? ? ? ? <font weight="400" style="italic">Roboto-Italic.ttf</font>

? ? ? ? <font weight="500" style="normal">Roboto-Medium.ttf</font>

? ? ? ? <font weight="500" style="italic">Roboto-MediumItalic.ttf</font>

? ? ? ? <font weight="900" style="normal">Roboto-Black.ttf</font>

? ? ? ? <font weight="900" style="italic">Roboto-BlackItalic.ttf</font>

? ? ? ? <font weight="700" style="normal">Roboto-Bold.ttf</font>

? ? ? ? <font weight="700" style="italic">Roboto-BoldItalic.ttf</font>

? ? </family>



其中要注意ttc文件

```

1234

```

<family lang="zh-Hans">

? ? ? ? <font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font>

? ? </family>

? ? <!-- TODO: Add Bopo -->

? ? <family lang="zh-Hant">

? ? ? ? <font weight="400" style="normal" index="3">NotoSansCJK-Regular.ttc</font>

? ? </family>

? ? <family lang="ja">

? ? ? ? <font weight="400" style="normal" index="0">NotoSansCJK-Regular.ttc</font>

? ? </family>

? ? <family lang="ko">

? ? ? ? <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>

? ? </family>

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市修肠,隨后出現(xiàn)的幾起案子贺辰,更是在濱河造成了極大的恐慌,老刑警劉巖嵌施,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲化,死亡現(xiàn)場離奇詭異,居然都是意外死亡吗伤,警方通過查閱死者的電腦和手機(jī)吃靠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來足淆,“玉大人撩笆,你說我怎么就攤上這事「灼郑” “怎么了夕冲?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長裂逐。 經(jīng)常有香客問我歹鱼,道長,這世上最難降的妖魔是什么卜高? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任弥姻,我火速辦了婚禮南片,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庭敦。我一直安慰自己疼进,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布秧廉。 她就那樣靜靜地躺著伞广,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疼电。 梳的紋絲不亂的頭發(fā)上嚼锄,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機(jī)與錄音蔽豺,去河邊找鬼区丑。 笑死,一個胖子當(dāng)著我的面吹牛修陡,可吹牛的內(nèi)容都是我干的沧侥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼魄鸦,長吁一口氣:“原來是場噩夢啊……” “哼宴杀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起号杏,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤婴氮,失蹤者是張志新(化名)和其女友劉穎斯棒,沒想到半個月后盾致,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荣暮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年庭惜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穗酥。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡护赊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砾跃,到底是詐尸還是另有隱情骏啰,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布抽高,位于F島的核電站判耕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏翘骂。R本人自食惡果不足惜壁熄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一帚豪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧草丧,春花似錦狸臣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仙蚜,卻和暖如春此洲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背委粉。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工呜师, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贾节。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓汁汗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栗涂。 傳聞我的和親對象是個殘疾皇子知牌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 2,694評論 0 3
  • 即將自己要做的某類事的步驟清單化,既可省時斤程,也可以省力角寸,因此,要建立自己的做事清單忿墅,清單必須要可執(zhí)行扁藕。 比如查理芒...
    老菜頭_dca8閱讀 345評論 0 0
  • 上次我們?nèi)ズ侔鄬W(xué)架子鼓亿柑,因?yàn)槭呛俟ぃ乙彩俏乙彩莿傔^去的棍弄,全都是一些不認(rèn)識的同學(xué)望薄。所以我就有點(diǎn)不好意思...
    學(xué)習(xí)就好閱讀 655評論 0 0
  • 1.健康. 記得上大學(xué)的時候,有位老師總說一句話:“你不能管理自己呼畸,那就被人管理痕支。”現(xiàn)在想想對疾病也是一樣的態(tài)度蛮原,...
    曉晨_888閱讀 96評論 0 0
  • 老大還是老大啊卧须,這個世界每天都是在變的,所以不要用我們自己看到的來概括全部,我的未來在哪里故慈,尋夢板熊,做自己。
    王汪忘往閱讀 59評論 0 0