是否可以为整个应用程序设置自定义字体?

2023-11-27

我需要在整个应用程序中使用某种字体。我有相同的 .ttf 文件。 是否可以在应用程序启动时将其设置为默认字体,然后在应用程序的其他地方使用它?设置后,如何在布局 XML 中使用它?


是的,有反思。这有效(基于这个答案):

(注意:这是由于缺乏对自定义字体的支持而采取的解决方法,因此如果您想改变这种情况,请加注星标安卓问题在这里). Note:不要在这个问题上留下“我也是”的评论,当你这样做时,每个关注过它的人都会收到一封电子邮件。所以请给它“加注星标”。

import java.lang.reflect.Field;
import android.content.Context;
import android.graphics.Typeface;

public final class FontsOverride {

    public static void setDefaultFont(Context context,
            String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(),
                fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    protected static void replaceFont(String staticTypefaceFieldName,
            final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class
                    .getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

然后,您需要重载一些默认字体,例如在应用 class:

public final class Application extends android.app.Application {
    @Override
    public void onCreate() {
        super.onCreate();
        FontsOverride.setDefaultFont(this, "DEFAULT", "MyFontAsset.ttf");
        FontsOverride.setDefaultFont(this, "MONOSPACE", "MyFontAsset2.ttf");
        FontsOverride.setDefaultFont(this, "SERIF", "MyFontAsset3.ttf");
        FontsOverride.setDefaultFont(this, "SANS_SERIF", "MyFontAsset4.ttf");
    }
}

或者当然,如果您使用相同的字体文件,您可以对此进行改进以仅加载一次。

然而我倾向于只覆盖一个,比如说"MONOSPACE",然后设置一种样式以强制该字体应用于整个应用程序:

<resources>
    <style name="AppBaseTheme" parent="android:Theme.Light">
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:typeface">monospace</item>
    </style>
</resources>

API 21 安卓 5.0

我调查了评论中的报告,认为它不起作用并且似乎与主题不兼容android:Theme.Material.Light.

如果该主题对您来说不重要,请使用较旧的主题,例如:

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:typeface">monospace</item>
</style>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以为整个应用程序设置自定义字体? 的相关文章

  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • CookieManager.getInstance().removeAllCookie();不删除所有cookie

    我在应用程序的 onCreate 中调用 CookieManager getInstance removeAllCookie 我遇到了一个奇怪的问题 我看到 GET 请求中传递了意外的 cookie 值 事实上 cookie 值是一个非常非
  • 在 Jetpack Compose 中启动动画矢量 Drawable

    我有一个动画矢量可绘制R drawable my anim 我想在 Jetpack Compose 中展示并开始 可绘制对象显示 渲染正确 但动画未启动 这是撰写视图 Composable fun SplashView Surface mo
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • Android Webview 图像未加载

    我制作了一个简单的应用程序WebView 但有些图片无法加载 正确 在我的电脑上 错误 在模拟器中 Correct 错误 没有横幅 于是我用Chrome debug进行调试 发现我的代码被改变了 我不添加像noscript or style
  • 调节麦克风录音音量

    我们正在尝试调整录音时的音量级别 麦克风似乎非常敏感 会接收到很多静电 我们查看了 setVolumeControlStream 但找不到传入其中来控制麦克风的流 将您的音频源设置为 MIC using MediaRecorder Audi
  • 使用 AWS Java SDK 为现有 S3 对象设置 Expires 标头

    我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据 我想设置 HTTPExpires每个对象的标头以更好地处理 HTTP 1 0 客户端 我们正在使用AWS Java SDK http aws amazon com sdkf
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 将多模块 Maven 项目导入 Eclipse 时出现问题 (STS 2.5.2)

    我刚刚花了最后一个小时查看 Stackoverflow com 上的线程 尝试将 Maven 项目导入到 Spring ToolSuite 2 5 2 中 Maven 项目有多个模块 当我使用 STS 中的 Import 向导导入项目时 所
  • 通过 ADB 拔出设备:“找不到服务”

    我必须测试我的应用程序在打瞌睡模式下的行为 根据文档 https developer android com training monitoring device state doze standby html testing doze 我
  • 应用程序关闭时的倒计时问题

    我制作了一个 CountDownTimer 代码 我希望 CountDownTimer 在完成时重新启动 即使应用程序已关闭 但它仅在应用程序正在运行或重新启动应用程序时重新启动 因此 如果我在倒计时为 00 10 分钟 秒 时关闭应用程序
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • Android JNI C 简单追加函数

    我想制作一个简单的函数 返回两个字符串的值 基本上 java public native String getAppendedString String name c jstring Java com example hellojni He
  • Springs 元素“beans”不能具有字符 [children],因为该类型的内容类型是仅元素

    我在 stackoverflow 中搜索了一些页面来解决这个问题 确实遵循了一些正确的答案 但不起作用 我是春天的新人 对不起 这是我的调度程序 servlet
  • 将 JTextArea 内容写入文件

    我在 Java Swing 中有一个 JTextArea 和一个 提交 按钮 需要将textarea的内容写入一个带有换行符的文件中 我得到的输出是这样的 它被写为文件中的一个字符串 try BufferedWriter fileOut n
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • 为什么Android的ImageReader类这么慢?

    我尝试了适用于 Android 3 4 1 的全新 OpenCVJavaCamera2View但它太慢了 仅显示相机视图约 15 fps 当我尝试较旧的JavaCameraView相反 它给了我很好的结果 30fps 这是我相机的极限 我想

随机推荐

  • 如何在 Sympy 中进行函数组合?

    我想做类似的事情h f g x 并能够对 h 进行微分 例如h diff x 仅针对一个功能 例如h cos x 这实际上是可能的 并且文档说得很清楚 但对于函数组合则不太清楚 如果您已经这样做了 请向我展示一个示例或将我链接到相关文档 如
  • Guice 在 UI 线程之外创建 Swing 组件有问题吗?

    我正在使用 Google Guice 作为 IOC 容器开发 Java Swing 应用程序 一切进展顺利 存在一些用户界面问题 当标准 L F 替换为推送像素时 由于 Guice 的 Swing 组件在 UI 线程之外创建 因此 Subs
  • 何时使用socket.io以及何时使用ajax

    我一直在nodejs 中编程 研究了如何使用socket io 和ajax 调用节点服务器 socket io 是为了取代 ajax 而设计的吗 我很想知道在哪些情况下使用 socket io 比较好 哪些 ajax 更好 感谢您的意见 嗯
  • 没有可用的事务性 EntityManager

    我是 jpa 和 spring 世界的新手 目前正在对一个简单的方法进行一些单元测试 但仅当我在单元测试模式下运行测试类时才会收到此错误消息 java lang IllegalStateException No transactional
  • 如何使用poi在java中读取excel(.xlsx)?

    我正在尝试用java读取excel 我有以下代码 import java io FileInputStream import java io IOException import java io InputStream import jav
  • PHP 中的 MACTripleDES

    我正在尝试获得与 C 等效的 MAC TripleDESMACTripleDES class 我尝试过以下mcrypt 但这只是 TripleDES 中的编码 我需要获取与 C 中生成的字符串等效的 MACTripleDES 字符串来验证消
  • Google OAuth 2 授权 - 将代码交换为令牌

    我正在尝试实施 Google OAuth 2 以访问 Google API 我跟随this指南 使用服务器端场景 我获取代码没有问题 服务器重定向到 localhost 这是目前重定向 URI 中允许的唯一服务器 为了实现这一目标 我去ht
  • 如何使用Tkinter模仿这个表?

    如何开始使用 Tkinter 创建类似的表 使用 Ttk TkinterTreeview小部件 这提供了一个树型布局或listview带有标题布局的样式列 As the Treeview小部件来自 Tk 的主题图标集 它在 Windows
  • 在prepareForSegue方法中防止segue?

    是否可以取消segueprepareForSegue method 我想在转场之前执行一些检查 如果条件不成立 在这种情况下 如果某些UITextField为空 显示错误消息而不是执行 segue 在 iOS 6 及更高版本中这是可能的 你
  • 用于 mysql 的开源 ER 图表工具 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想对我拥有的数据库的数据库定义转储进行逆向工程 导入到图表形式 然后由于在这个特定数据库中没有定义外键 我希望能够手动创建表到表键映射 使用 cr
  • 将动态 JSON 对象传递到 Web API - Newtonsoft 示例

    我需要将动态 JSON 对象传递到我的 Web API 控制器 以便我可以根据它的类型对其进行处理 我尝试过使用 JSON NET 示例可以在这里看到但是当我使用Fiddler时 我可以看到传入的JObect始终为空 这是粘贴到 Fiddl
  • 来自嵌套字典的 Pandas 数据框

    我的字典看起来像这样 x b 10 c 20 y b 33 c 44 我想获得一个如下所示的数据框 index col1 col2 val 0 x b 10 1 x c 20 2 y b 33 3 y c 44 我尝试调用 pandas f
  • 以编程方式设置时 UITextView selectedRange 不显示

    我的问题是以编程方式设置 UITextView 的 selectedRangeselects文字 但是does not直观地表明它已被选中 这听起来像是 OS 3 0 3 1 中的错误吗 更重要的是 有什么解决方案或建议可以显示选择 示例项
  • 单击按钮后使用 Selenium 切换到新窗口

    我正在开发一个非常简单的网页项目 但遇到了一些困难 我正在使用一个网站 填写表格并单击按钮后 我会在新窗口中打开 XML 文档 从而获得所需的数据 但是 我不知道如何访问它 因为没有给出窗口名称 browser Browser firefo
  • 如何从SQL Server查询数据?

    我在从数据库查询数据以在 VB NET 中制作报告时遇到问题 我使用业务对象来制作报告 这是我的示例数据 Id Item Unit Unit Price Quantity Amount
  • Python:与 list.remove 混淆

    我对 Python 很陌生 很抱歉这个可能很简单的问题 虽然我现在花了2个小时才找到答案 我简化了代码来说明问题 side 5 eva side print str side side before print str eva eva be
  • 限制Spritekit游戏中GUI元素的比例

    由于帖子太大 我提前道歉 但是每个尝试过制作某种通用应用程序的人都知道这是一个相当有问题的东西 所以请对我宽容一些 The goal 我想要实现的目标 如上图所示 是在 iPhone 5 和 6 上使用 2x 资源 并保持应用程序的相同外观
  • 动态模块/服务配置和 AOT

    我需要根据运行时开关动态配置一些 Angular 服务 在 AOT 之前的几天 我使用以下代码让它工作 NgModule imports HttpModule providers export class MyModule static f
  • 将地址分配给整型变量

    为什么你可以像这样给整型变量分配地址 编译器不会给出错误 我一直认为你只能将整数值分配给整数变量 int a 0x28ff1c 您可以对 char 变量执行相同的操作 编译器不会给出错误 char b 0x28ff1c 它将在控制台屏幕上输
  • 是否可以为整个应用程序设置自定义字体?

    我需要在整个应用程序中使用某种字体 我有相同的 ttf 文件 是否可以在应用程序启动时将其设置为默认字体 然后在应用程序的其他地方使用它 设置后 如何在布局 XML 中使用它 是的 有反思 这有效 基于这个答案 注意 这是由于缺乏对自定义字