添加自定义字体为主题的机器人 [英] Adding custom Font to Theme in Android

查看:149
本文介绍了添加自定义字体为主题的机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有什么办法可以添加自定义字体在主题中的Andr​​oid?

Is there any way to add custom fonts in Themes in Android?

我已经阅读小提示:定制的Andr​​oid字体的,但在这里我们要programmetrically添加自定义字体的文本。

I have read Quick Tip: Customize Android Fonts, but here we have to programmetrically add custom font to text.

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

不过,我想通过设置样式/主题自定义字体。

But I want to set the custom font by style/theme.

推荐答案

不幸的是,Android不提供你正在寻找的快速,简单和干净的方式来改变字体为您的整个应用程序。但最近我已经研究过这个问题,并创造了一些工具,使您可以更改字体无需任何编码(您可以通过XML,样式,甚至文本露面做这一切)。他们基于类似的解决方案,如你在这里其他的答案看,但允许更大的灵活性。你可以阅读所有关于它这个博客,你可以下载code <一个HREF =htt​​ps://github.com/Innovattic/Android-Font-Integration>这里。

Unfortunately, Android doesn't provide the quick, easy and clean way you're looking for to change the font for your entire app. But recently I've looked into this matter and created some tools that allow you to change the font without any coding (you can do it all through xml, styles and even text appearances). They're based on similar solutions like you see in the other answers here, but allow for far more flexibility. You can read all about it on this blog, and you can download the code here.

下面是一个如何应用这些工具的一个例子。放入所有的字体文件资源/字体/ 。然后,声明在XML文件中的字体(如 RES / XML / fonts.xml ),并与 TypefaceManager.initialize您的应用程序的早期加载此文件(这一点,R.xml.fonts); (例如,在你的应用程序类的OnCreate)。 XML文件看起来是这样的:

Here's an example of how to apply these tools. Put all your font files in assets/fonts/. Then, declare those fonts in an xml file (e.g. res/xml/fonts.xml) and load this file early in your app with TypefaceManager.initialize(this, R.xml.fonts); (e.g., in the onCreate of your Application class). The xml file looks like this:

<?xml version="1.0" encoding="utf-8"?>
<familyset>

    <!-- Some Font. Can be referenced with 'someFont' or 'aspergit' -->
    <family>
        <nameset>
            <name>aspergit</name>
            <name>someFont</name>
        </nameset>
        <fileset>
            <file>Aspergit.ttf</file>
            <file>Aspergit Bold.ttf</file>
            <file>Aspergit Italic.ttf</file>
            <file>Aspergit Bold Italic.ttf</file>
        </fileset>
    </family>

    <!-- Another Font. Can be referenced with 'anotherFont' or 'bodoni' -->
    <family>
        <nameset>
            <name>bodoni</name>
            <name>anotherFont</name>
        </nameset>
        <fileset>
            <file>BodoniFLF-Roman.ttf</file>
            <file>BodoniFLF-Bold.ttf</file>
        </fileset>
    </family>

</familyset>

现在,你可以通过使用自定义的UI元素 com.innovattic.view.FontTextView 在XML的布局。下面你可以看到如何应用的字体所有的文本在您的整个应用程序,只需通过修改 RES /价值/ styles.xml

Now you can use these fonts in your style or xml (provided you use the tools I mentioned above), by using the custom UI element com.innovattic.view.FontTextView in your xml layout. Below you can see how you can apply a font to all texts in your entire app, just by editing res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">

    <!-- Application theme -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        <item name="android:textViewStyle">@style/MyTextViewStyle</item>
    </style>

    <!-- Style to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextViewStyle" parent="@android:style/Widget.Holo.Light.TextView">
        <item name="android:textAppearance">@style/MyTextAppearance</item>
    </style>

    <!-- Text appearance to use for ALL text views (including FontTextView) -->
    <!-- Use a different parent if you don't want Holo Light -->
    <style name="MyTextAppearance" parent="@android:style/TextAppearance.Holo">
        <!-- Alternatively, reference this font with the name "aspergit" -->
        <!-- Note that only our own TextView's will use the font attribute -->
        <item name="font">someFont</item>
        <item name="android:textStyle">bold|italic</item>
    </style>

    <!-- Alternative style, maybe for some other widget -->
    <style name="StylishFont">
        <item name="font">anotherFont</item>
        <item name="android:textStyle">normal</item>
    </style>

</resources>

通过附带的 RES /布局/ layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!-- This text view is styled with the app theme -->
    <com.innovattic.view.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This uses my font in bold italic style" />

    <!-- This text view is styled here and overrides the app theme -->
    <com.innovattic.view.FontTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:font="anotherFont"
        android:textStyle="normal"
        android:text="This uses another font in normal style" />

    <!-- This text view is styled with a style and overrides the app theme -->
    <com.innovattic.view.FontTextView
        style="@style/StylishFont"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="This also uses another font in normal style" />

</LinearLayout>

不要忘记申请的主题在你的Andr​​oid清单。

Don't forget to apply the theme in your Android manifest.

这篇关于添加自定义字体为主题的机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆