Android不同的字体为每种语言

hgtggwj0  于 5个月前  发布在  Android
关注(0)|答案(5)|浏览(69)

有没有办法为每种语言使用不同的字体?
有values-en,values-fr.等,但我们可以做一些像font-fr,font-ar.等?
PS,我说的是res/font,不是assets/fonts。我希望能够在XML中设置一种字体,然后获得每种语言的更改,而无需以编程方式设置字体。

bksxznpy

bksxznpy1#

试试这个:
1.在res/font中添加所有字体文件
1.本地化style.xml(创建values/style.xmlvalues-ln/style.xml
1.在AppTheme中,对于每个style.xml,添加<item name="android:fontFamily">@font/your_desired_font</item>
1.仅此而已
如果一种语言有多个字体(比如常规字体、粗体字体、浅色字体等),那么将其添加到每个style.xml中,例如:

<style name="FontLocalizedBold">
        <item name="android:fontFamily">@font/your_desired_font</item>
    </style>

字符串
使用方法:

<TextView
        android:id="@+id/textViewId"
        android:layout_width="100dp"
        android:layout_height="100dp"
        style="@style/FontLocalizedBold"
        android:gravity="center"
        tools:text="XX"/>

8cdiaqws

8cdiaqws2#

这是可能的。
1.将您的本地化otf文件放在您的字体文件夹中(未本地化)
1.在本地化值文件夹(values-fr)中复制styles.xml,不使用<item name="android:fontFamily">@font/app_font</item>进行任何更改。
1.创建本地化字体文件夹(font-fr)。
1.在新的字体文件夹中,使用android:font="@font/your_localized_otf_file"创建app_font.xml
您的本地化字体文件夹将被本地化值文件夹中的本地化样式文件使用。但otf/ttf文件应位于常规字体文件夹中。

更新:

上面的答案只是利用font-xx文件夹(在问题中要求),但由于我们使用本地化的styles.xml,因此有一个更简单的解决方案,没有font-xx文件夹。
1.把你的本地化的otf文件放在你的字体文件夹中
1.使用android:font="@font/your_localized_otf_file"在字体文件夹中创建different_language_font. xml
1.在本地化值文件夹(values-fr)中的styles.xml中<item name="android:fontFamily">@font/different_language_font</item>

unhi4e5o

unhi4e5o3#

首先,你需要创建字体目录:
1-右键单击res文件夹,然后转到新建> Android资源目录。出现新建资源目录窗口。
2-在资源类型>中选择字体,然后单击确定。
3-注意:资源目录的名称必须是font。
4-将字体文件添加到font文件夹中(无论是otf还是ttf)
5-右键单击res \ font文件夹>新建>字体资源文件
6-阿拉伯语。
7-将此代码复制到创建的文件中。

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<!-- regular -->
<font
    android:font="@font/ArabicFont"
    android:fontStyle="normal"
    android:fontWeight="400"

    app:font="@font/ArabicFont"
    app:fontStyle="normal"
    app:fontWeight="400" />

<!-- bold -->
<font
    android:font="@font/ArabicFont"
    android:fontStyle="normal"
    android:fontWeight="700"

    app:font="@font/ArabicFont"
    app:fontStyle="normal"
    app:fontWeight="700" />

</font-family>

字符串
8-重复步骤#5并将文件重命名为“english”。然后将以下代码复制到其中:

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<!-- regular -->
<font
    android:font="@font/EnglishFont"
    android:fontStyle="normal"
    android:fontWeight="400"

    app:font="@font/EnglishFont"
    app:fontStyle="normal"
    app:fontWeight="400" />

<!-- bold -->
<font
    android:font="@font/EnglishFont"
    android:fontStyle="normal"
    android:fontWeight="700"

    app:font="@font/EnglishFont"
    app:fontStyle="normal"
    app:fontWeight="700" />

</font-family>


9-为res/values/styles.xml中的每种语言创建新的locale文件(右键单击>新建>值资源文件>写入样式)。注意,您必须从“可用限定符”中选择“Locale”>单击按钮“>>”然后选择您的语言>然后单击确定。“您应该会看到新的styles.xml(ar)”
10-将styles.xml的所有默认生成内容复制并粘贴到创建的styles.xml“ex. styles.xml(ar)and styles.xml(en)”中
11-转到styles.xml(en)并在style标签中添加这一xml行

<item name="fontFamily">@font/english</item>


12-现在重复并转到styles.xml(ar),并在style标签中添加这一xml行

<item name="fontFamily">@font/arabic</item>


13-现在运行并查看更改区域设置后的不同情况。
14-享受阿尔塔

fumotvh3

fumotvh34#

您可以为每个本地化设置不同的styles.xml文件,并在每个样式文件下定义fontFamily。
要声明字体家族,你可以创建一个xml文件,如下所示,你可以引用otf或ttf文件。
您可以在font目录下创建.xml文件,并在其中定义所有字体。

<!--  bukra.xml file which contains all the font families -->

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

<font
    android:font="@font/bukra_semi_condensed_extra_light_normal"
    android:fontStyle="normal" />

<font
    android:font="@font/bukra_semi_condense_light_slanted"
    android:fontStyle="italic" />

</font-family>

字符串
并基于本地化为您的应用程序定义两种不同的字体,如下所示。
这个styles.xml文件在我的values-ar文件下。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimary</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="fontFamily">@font/bukra</item>
    </style>

wwwo4jvm

wwwo4jvm5#

我使用了@ghita解决方案。然而,在我的情况下,因为我想在通用样式中也有textSize,lineHeight,fontWeight和textColor,所以我把字体家族放在不同的文件中(即“font_families.xml”)。这是我的文件如何寻找一个区域设置:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item name="regular" type="font">@font/alegreya_sans_regular</item>
    <item name="medium" type="font">@font/alegreya_sans_medium</item>
    <item name="semi_bold" type="font">@font/alegreya_sans_bold</item>
    <item name="wide_medium" type="font">@font/alegreya_sans_medium</item>
    <item name="wide_regular" type="font">@font/alegreya_sans_regular</item>
</resources>

字符串
之后,我在themes.xml文件中引用它们,即:

<style name="LargeTitleMedium" parent="TextAppearance.AppCompat.Title">
        <item name="android:textSize">40sp</item>
        <item name="lineHeight">48sp</item>
        <item name="android:fontFamily">@font/wide_medium</item>
        <item name="fontWeight">500</item>
        <item name="android:textColor">@color/neutral_10</item>
    </style>

相关问题