Android 加载自定义字体

 Android 应用中加载自定义字体可以提升用户体验和品牌形象。Android 提供了多种方式来加载和使用自定义字体,包括使用资源文件、XML 字体声明以及代码动态加载。以下是详细的步骤和示例代码,帮助你在 Android 项目中加载和使用自定义字体。

方法一:使用资源文件

1. 添加字体文件

首先,将你的自定义字体文件(例如 MyCustomFont.ttfMyCustomFont.otf)添加到项目的 res/font 目录中。如果没有 font 目录,请手动创建它。

app/
    res/
        font/
            MyCustomFont.ttf
2. 在 XML 中声明字体

res/values/styles.xmlres/values/themes.xml 文件中声明一个样式,并指定自定义字体。

示例 styles.xml
 
<!-- res/values/styles.xml -->
<resources>
    <!-- Base application theme. -->
    <style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="fontFamily">@font/my_custom_font</item>
    </style>

    <!-- Custom text style using the custom font -->
    <style name="TextAppearance.CustomFont" parent="TextAppearance.AppCompat.Body1">
        <item name="fontFamily">@font/my_custom_font</item>
    </style>
</resources>
示例 themes.xml
 
<!-- res/values/themes.xml -->
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="fontFamily">@font/my_custom_font</item>
    </style>
</resources>
3. 在布局文件中使用字体

在布局文件中使用自定义字体样式。

示例 activity_main.xml
 
<!-- res/layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="#000000"
        style="@style/TextAppearance.CustomFont" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me"
        android:layout_marginTop="16dp"
        android:textAllCaps="false"
        android:textStyle="bold"
        android:textColor="#FFFFFF"
        android:backgroundTint="@color/purple_500"
        style="@style/TextAppearance.CustomFont" />
</LinearLayout>

方法二:直接在 XML 中引用字体

你也可以直接在布局文件中引用自定义字体,而不需要在 styles.xml 中声明样式。

示例 activity_main.xml
 
<!-- res/layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="#000000"
        android:fontFamily="@font/my_custom_font" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Click Me"
        android:layout_marginTop="16dp"
        android:textAllCaps="false"
        android:textStyle="bold"
        android:textColor="#FFFFFF"
        android:backgroundTint="@color/purple_500"
        android:fontFamily="@font/my_custom_font" />
</LinearLayout>

方法三:使用 Font Resource File

你可以创建一个单独的字体资源文件来管理多个字体变体(如粗体、斜体等)。

1. 创建字体资源文件

res/font 目录中创建一个 XML 文件来定义字体资源。

my_custom_font.xml
 
<!-- res/font/my_custom_font.xml -->
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/my_custom_font_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/my_custom_font_italic" />
    <font
        android:fontStyle="normal"
        android:fontWeight="700"
        android:font="@font/my_custom_font_bold" />
</font-family>
2. 在布局文件中使用字体资源

在布局文件中使用定义的字体资源。

activity_main.xml
 
<!-- res/layout/activity_main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello, World!"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="#000000"
        android:fontFamily="@font/my_custom_font" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Italic Text"
        android:textSize="24sp"
        android:textStyle="italic"
        android:textColor="#000000"
        android:fontFamily="@font/my_custom_font" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Bold Text"
        android:textSize="24sp"
        android:textStyle="bold"
        android:textColor="#000000"
        android:fontFamily="@font/my_custom_font" />
</LinearLayout>

方法四:使用代码动态加载字体

如果你需要在运行时动态加载字体,可以使用 Typeface 类。

1. 加载字体并在 TextView 中使用

在 Activity 或 Fragment 中加载自定义字体并应用到 TextView

import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Load the custom font
        Typeface customFont = Typeface.createFromAsset(getAssets(), "fonts/MyCustomFont.ttf");

        // Find the TextView and apply the custom font
        TextView textView1 = findViewById(R.id.textView1);
        textView1.setTypeface(customFont);
    }
}

进入代码分屏

2. 确保字体文件路径正确

确保字体文件放在 assets/fonts 目录中。

 
app/
    src/
        main/
            assets/
                fonts/
                    MyCustomFont.ttf

总结

通过上述方法,你可以在 Android 应用中轻松加载和使用自定义字体。以下是每种方法的简要总结:

  1. 使用资源文件:

    • 将字体文件放入 res/font 目录。
    • 在 styles.xml 或 themes.xml 中声明样式。
    • 在布局文件中使用样式或直接引用字体。
  2. 直接在 XML 中引用字体:

    • 将字体文件放入 res/font 目录。
    • 在布局文件中直接使用 android:fontFamily 属性。
  3. 使用 Font Resource File:

    • 创建一个字体资源文件来管理多个字体变体。
    • 在布局文件中使用定义的字体资源。
  4. 使用代码动态加载字体:

    • 将字体文件放入 assets/fonts 目录。
    • 使用 Typeface.createFromAsset 动态加载字体。
    • 应用到相应的 UI 组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值