Android 应用中加载自定义字体可以提升用户体验和品牌形象。Android 提供了多种方式来加载和使用自定义字体,包括使用资源文件、XML 字体声明以及代码动态加载。以下是详细的步骤和示例代码,帮助你在 Android 项目中加载和使用自定义字体。
方法一:使用资源文件
1. 添加字体文件
首先,将你的自定义字体文件(例如 MyCustomFont.ttf
或 MyCustomFont.otf
)添加到项目的 res/font
目录中。如果没有 font
目录,请手动创建它。
app/
res/
font/
MyCustomFont.ttf
2. 在 XML 中声明字体
在 res/values/styles.xml
或 res/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 应用中轻松加载和使用自定义字体。以下是每种方法的简要总结:
-
使用资源文件:
- 将字体文件放入
res/font
目录。 - 在
styles.xml
或themes.xml
中声明样式。 - 在布局文件中使用样式或直接引用字体。
- 将字体文件放入
-
直接在 XML 中引用字体:
- 将字体文件放入
res/font
目录。 - 在布局文件中直接使用
android:fontFamily
属性。
- 将字体文件放入
-
使用 Font Resource File:
- 创建一个字体资源文件来管理多个字体变体。
- 在布局文件中使用定义的字体资源。
-
使用代码动态加载字体:
- 将字体文件放入
assets/fonts
目录。 - 使用
Typeface.createFromAsset
动态加载字体。 - 应用到相应的 UI 组件。
- 将字体文件放入