日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android APP 全局字体替换-思源黑体

發布時間:2023/12/10 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android APP 全局字体替换-思源黑体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于字體設置的屬性及替換方式,可以參考如下文章:

  • Android字體系列 (一):Android字體基礎
  • Android字體系列 (四):全局替換字體方式
  • Android官方文檔-XML 中的字體
    以上文章已經詳細介紹如何更換字體了,本文僅介紹字體更換的操作及注意事項。

全局更換字體操作流程

  • 字體放置到 res/font 目錄
    如使用思源黑體 font/noto_sans_sc.otf
  • 主題中使用 android:fontFamily 指定字體
  • <item name="android:fontFamily">@font/noto_sans_sc</item>
  • 將主題應用到 Activity
  • 其他情況處理

    完成上一步之后,對應的Activity,包括其中彈出的Dialog中的文本的字體就已經更改了,但是實踐中有一些其他情況需要處理。

    Toast 字體替換

    使用自定義Toast,然后設置其中 TextView 的字體

    Typeface font = null;try {font = ResourcesCompat.getFont(context, sCustomFontResId);} catch (Resources.NotFoundException ignore) {Log.e("ToastUtils", "customFont not found: " + sCustomFontResId);}if (font != null) {view.setTypeface(font);view.setIncludeFontPadding(false);}Toast toast = new Toast(context);toast.setView(view);

    思源黑體的 fontPadding 處理

    發現使用思源黑體之后,TextView 的垂直邊距及行間距出現了問題:

  • 上下邊距變寬;
  • 換行后文本行間距變窄;
  • 對于上述問題,解決方案如下:

  • 上下邊距變寬;
    在主題中加入 android:includeFontPadding 的配置,將其值設置為 false
  • <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:fontFamily">@font/noto_sans_sc</item><item name="android:includeFontPadding">false</item> </style>
  • 換行后文本行間距變窄;
    發現是早期的思源黑體字體的問題,下載使用較新版本的 思源黑體 不存在此問題;
  • 字體變體加載過多導致內存溢出問題處理

    部分字體存在多種不同字重,如思源黑體存在7中字重的文件,如果全部加載到內存中,則部分VM內存較小的設備會直接OOM崩潰,故只引入normal字重(400)的字體

    總結

  • 引入字體
    noto_sans_sc_regular 字體文件拷貝到res/font 目錄,并添加 noto_sans_sc.xml 的字體定義文件:
  • <?xml version="1.0" encoding="utf-8"?> <font-family xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"tools:ignore="ResourceName"><fontapp:font="@font/noto_sans_sc_regular"app:fontStyle="normal"app:fontWeight="400"/> </font-family>

    需要使用 app 的 namespace 確保向下兼容性

  • 主題配置
  • <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:fontFamily">@font/noto_sans_sc</item><item name="android:includeFontPadding">false</item> </style>
  • 其他 TextView 字體替換
  • ResourcesCompat.getFont(context, sCustomFontResId) view.setTypeface(font); view.setIncludeFontPadding(false);

    總結

    以上是生活随笔為你收集整理的Android APP 全局字体替换-思源黑体的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。