Android - 如何为整个应用程序设置自定义字体[重复]

     2023-03-15     257

关键词:

【中文标题】Android - 如何为整个应用程序设置自定义字体[重复]【英文标题】:Android - How to set a custom font for whole app [duplicate] 【发布时间】:2012-08-30 04:36:29 【问题描述】:

可能重复:Is it possible to set font for entire Application?

我需要为整个应用程序设置自定义字体(.ttf 格式),我该怎么做? 如果可能,来自 Manifest 或 XML 将是最佳选择

【问题讨论】:

仅仅因为它被标记为重复,无法提供更好的答案:使用书法库来实现这一点。它甚至改变了 toasts 的字体。 你不就用github.com/chrisjenx/Calligraphy 【参考方案1】:

2014 年 9 月编辑:

对于仍然看到这个旧的可怕答案的人来说,真正好的答案就在这里:

https://***.com/a/16883281/1154026


旧:

您最好的选择是:

Customize Android Fonts

所以

    TextView text = (TextView) findViewById(R.id.custom_font);
    Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
    text.setTypeface(font);

您的 .ttf 位于“assets”文件夹的根目录中。

【讨论】:

这很好用,但是如果我有一个 ListView,我该如何更改行的字体?我想可以通过 XML 该解决方案似乎不再适用于 Android 5.0 还有其他选择吗? @AndreaMarioLufino 在您的适配器中将此字体设置为您获得的所有文本视图都可以。假设您有textview1,textview2textView3,那么您应该只对它们使用 setTypface(yourfont)。希望对您有所帮助。【参考方案2】:

你可以这样做。 创建一个自定义文本视图并在任何地方使用它

public class MyTextView extends android.widget.TextView


    public MyTextView(Context context)
    
        this(context, null);
    

    public MyTextView(Context context, AttributeSet attrs)
    
        this(context, attrs, 0);
    

    public MyTextView(Context context, AttributeSet attrs, int defStyle)
    
        super(context, attrs);
        if (this.isInEditMode()) return ;

        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle);
        final String customFont = a.getString(R.styleable.SomeStyle_font);

        //Build a custom typeface-cache here!
        this.setTypeface(
            Typeface.createFromAsset(context.getAssets(), customFont)
        );  
    

将此添加到 attrs.xml

<declare-styleable name="SomeStyle">
    <attr name="font" format="string" />
</declare-styleable>

然后在您的主题中,执行以下操作: 这将确保所有文本视图都将使用 MyTextView 样式

<item name="android:textViewStyle">@style/MyTextView</item>

现在我们可以使用此样式中的自定义属性来定义您的自定义字体。

<style name="MyTextView" parent="@android:style/Widget.TextView">
    <item name="font">MyPathToFontInAssets.ttf</item>
</style>

所以每当你在项目中使用 MyTextView 时,它都会有你的自定义字体。

重要提示:字体不会被缓存,因此如果您打算使用此代码,您还应该构建一个自定义字体缓存,以便您可以为所有文本视图重复使用自定义字体。这将显着加快应用程序的速度!

更新:正如 Amir 所说,这与 Custom fonts and XML layouts (Android) 几乎相同,但我也使用 android 样式自动在应用程序中的所有文本视图上使用它。

【讨论】:

嗨!它在这一行中显示错误&lt;item name="android:textViewStyle"&gt;@style/MyTextView&lt;/item&gt; ** 需要“类型”属性** 我现在必须做什么? 我通过添加type="string"清除了错误 字体没有缓存,所以如果你打算使用这段代码,你还应该构建一个自定义的字体缓存如何构建一个缓存? 您可以在某处拥有一个静态单例类,其中包含一个包含对加载字体的引用的哈希图。请务必在您的应用关闭时清除它! MyPathToFontInAssets.ttf 如何在此处设置路径?有什么例子吗?谢谢~【参考方案3】:

创建一个 TextView 子类并在任何地方使用它

    public class RobotoTextView extends TextView 

    public RobotoTextView(Context context, AttributeSet attrs, int defStyle) 
        super(context, attrs, defStyle);
        init();
    

    public RobotoTextView(Context context, AttributeSet attrs) 
        super(context, attrs);
        init();
    

    public RobotoTextView(Context context) 
        super(context);
        init();
    

    private void init() 
        if (!isInEditMode()) 
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
            setTypeface(tf);
        
    


用法

<com.test.RobotoTextView
        android:id="@+id/name"
        android:layout_
        android:layout_
        />

在java代码中你可以把它转换成TextView

【讨论】:

【参考方案4】:
TextView tv=(TextView)findViewById(R.id.custom);
    Typeface face=Typeface.createFromAsset(getAssets(),
                                          "fonts/Verdana.ttf");

    tv.setTypeface(face);

将字体文件放在/res/的fonts文件夹中

如果对我的回答有帮助,请点赞...

【讨论】:

【参考方案5】:

您可以按照here 的建议扩展 TextView 并在上面设置您的字体,然后在整个应用程序中使用它。

【讨论】:

如何为 Nslocal 通知设置自定义重复间隔.....?

】如何为Nslocal通知设置自定义重复间隔.....?【英文标题】:HowTosetCustomrepeatintervalForNslocalNotification.....?【发布时间】:2011-08-0905:32:49【问题描述】:我是iphone开发的新手。我正在尝试在我的项目中使用NslocalNotification我需要每2... 查看详情

如何为整个 c# 应用程序设置默认文化信息

】如何为整个c#应用程序设置默认文化信息【英文标题】:howtosetdefaultcultureinfoforentirec#application【发布时间】:2012-11-0111:54:44【问题描述】:我想为该类或整个应用程序设置默认文化信息。例如在土耳其3,2=英语3.2所以应用程序使... 查看详情

目标c如何为整个应用程序上的所有UIbuttons设置独家触摸

】目标c如何为整个应用程序上的所有UIbuttons设置独家触摸【英文标题】:objectivechowtosetexclusivetouchforallUIbuttonsonthewholeapp【发布时间】:2014-06-1108:16:55【问题描述】:我的应用程序有很多按钮我想同时设置ExclusiveTouch所有这些。或... 查看详情

如何为项目创建自定义安装程序流程?

】如何为项目创建自定义安装程序流程?【英文标题】:HowcanIcreateacustominstallerprocessforaproject?【发布时间】:2021-10-3119:16:39【问题描述】:我创建了一个Symfony项目,将在其他公司复制。我想通过使用“composercreate-project”之类的... 查看详情

如何为 Spring Datasource 创建自定义重试逻辑?

...重试逻辑。我希望重试逻辑在启动时(如果需要)以及在应用程序运行时出现连接故障的任何时候都运行。我做了一个测试,我从我的应用程序中删除了 查看详情

android开发中如何为应用设置全局字体(第三方字体)?

...整个程序中。我目前所知的有一个方法是<itemname="android:typeface">monospace</item>,不过只能使用系统自带的,无法使用第三方的。最简单的就是自定义TextView,所有的显示文字都用这个,然后控制一个textview就好了参... 查看详情

如何为布局设置不同的主题

...题。在styles.xml中定义如下:<stylename="DefaultTheme"parent="@android:style/Theme.Holo.Light"><!--Customizationhere-->< 查看详情

如何为 ExtJS GridPanel 实现自定义行排序

...】:2011-11-0813:00:45【问题描述】:我已经实现了一个Web-应用程序,它具有一个可以分组或取消分组的GridPanel,并且行应该按字母数字排序(就像标准网格排序功能一样),但表示摘要行的某些行不应该完全排序,并且应该保持... 查看详情

Android:如何为应用程序设置文化值

】Android:如何为应用程序设置文化值【英文标题】:Android:Howtosetculturevaluesforapplication【发布时间】:2012-01-2915:16:52【问题描述】:)我是一名C#开发人员,现在我开始为android编写应用程序。在C#中,我们有CultureInfo对象,我们可... 查看详情

pyqtdeploy:如何为 Android 设置应用程序图标?

】pyqtdeploy:如何为Android设置应用程序图标?【英文标题】:pyqtdeploy:howtosetapplicationiconforAndroid?【发布时间】:2020-07-0112:57:28【问题描述】:我正在关注this如何使用Python3和Qt5构建Android应用程序。几乎一切正常,但不知何故我不... 查看详情

如何为整个应用程序创建字体大小选项(小、正常、大)? [复制]

】如何为整个应用程序创建字体大小选项(小、正常、大)?[复制]【英文标题】:HowtocreateFontsizeoptions(Small,Normal,Large)fortheentireapp?[duplicate]【发布时间】:2017-10-1514:26:01【问题描述】:我希望有一个设置活动,用户可以在其中更... 查看详情

如何为 Android 应用程序设置 IntelliJ IDEA?

】如何为Android应用程序设置IntelliJIDEA?【英文标题】:HowdoIsetupIntelliJIDEAforAndroidapplications?【发布时间】:2011-07-1308:57:16【问题描述】:【问题讨论】:这是一个非常好的***问题。【参考方案1】:另一种识别正确SDK的方法是安装... 查看详情

如何为 Flutter 应用程序开发设置 Android Studio? [关闭]

】如何为Flutter应用程序开发设置AndroidStudio?[关闭]【英文标题】:HowcanIsetupAndroidStudioforFlutterapplicationdevelopment?[closed]【发布时间】:2018-04-1205:10:34【问题描述】:我有在AndroidStudio中开发Android应用程序的经验。近期跨平台应用开... 查看详情

如何为 Android 应用设置 Firebase 数据库安全规则

...时间】:2016-09-2018:33:51【问题描述】:我正在制作android应用程序,它将从用户那里收集有用的信息。这是代码FirebasepostRef=mRef.child("marks");Map<String,String>mar 查看详情

如何为整个 App 设置 UIKeyboard-Style?

】如何为整个App设置UIKeyboard-Style?【英文标题】:HowtosettheUIKeyboard-StyleforthewholeApp?【发布时间】:2013-01-3118:50:37【问题描述】:我目前正在尝试全局设置键盘样式,但我的方法不起作用。我尝试使用UIAppearance并将这行代码放入Ap... 查看详情

如何为android中的APP设置默认权限值?

...是Android新手,目前我正在做一个与相机相关的项目。此应用程序将需要访问相机的权限。我在想,如果我能把权限的默认值设置为“是”,那么当APP第一次启动时,请求权限的窗口就不会出现了。【问题讨论】:不会违背请 查看详情

如何为整个应用自定义 UINavigationBar?

...所以要友善。整个应用都有一个不同颜色的导航栏。整个应用程序的导航栏中几乎没有选项。它们都是一样的。我期待什么?我已经为UINavigationController创建了这个扩展,并且能够根据 查看详情

如何为 Blazor 服务器应用设置显示宽度?

...发布时间】:2021-01-1309:53:59【问题描述】:默认情况下,应用程序使用Bootstrap。我尝试在MainLayout.razor中使用几个div类,但该应用程序填充了整个屏幕宽度。例如,当应用在台式机(或笔记本电脑)上运行时,如何将其设置为屏... 查看详情