我正在尝试将Google的Quicksand字体(https://fonts.google.com/?query=quicksand)应用到我的Xamarin Android应用中。
我已将quicksand_bold.ttf
,quicksand_light.ttf
,quicksand_medium.ttf
和quicksand_regular.ttf
添加到Resources\font
文件夹,其构建类型为AndroidResource。
我还在同一个文件夹中添加了一个名为quicksand.xml
的文件。这包含文本
<?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">
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font android:font="@font/quicksand_regular"
android:fontStyle="normal"
android:fontWeight="400"
app:font="@font/quicksand_regular"
app:fontStyle="normal"
app:fontWeight="400" />
<font android:font="@font/quicksand_bold"
android:fontStyle="normal"
android:fontWeight="700"
app:font="@font/quicksand_bold"
app:fontStyle="normal"
app:fontWeight="700" />
<font android:font="@font/quicksand_medium"
android:fontStyle="normal"
android:fontWeight="500"
app:font="@font/quicksand_medium"
app:fontStyle="normal"
app:fontWeight="500" />
<font android:font="@font/quicksand_light"
android:fontStyle="normal"
android:fontWeight="300"
app:font="@font/quicksand_light"
app:fontStyle="normal"
app:fontWeight="300" />
</font-family>
</font-family>
最后我将主题Theme="@style/MyTheme"
应用于我的主要活动:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="@android:style/Theme.Holo">
<item name="android:fontFamily">@font/quicksand</item>
</style>
</resources>
我一直在关注https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/resources-in-android/fonts的说明。我假设@font/quicksand
元素将系统定向到quicksand.xml
文件。
我原本以为这些步骤足以让字体作为默认样式的一部分被拾取,但这种情况不会发生。
我错过了一步吗?
答案 0 :(得分:1)
在Android中使用自定义字体可能会非常棘手,它可能会导致大量使用RAM。
向您的应用添加自定义字体的最简单方法之一是使用Calligraphy-xamarin,即Calligraphy的Xamarin绑定。
以下是快速教程:
首先Install-Package CallygraphyXamarin
,然后将以下内容添加到您的活动
protected override void AttachBaseContext(Context newBase)
{
base.AttachBaseContext(CalligraphyContextWrapper.Wrap(newBase));
}
最后使用自定义字体:
<TextView
fontPath="fonts/myfont.ttf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello world!" />
如果您要为应用设置默认字体,请在项目中添加(例如)MyApplication.cs
,其中包含以下内容:
[Application]
public class MyApplication : Application
{
/// <inheritdoc />
public MyApplication(IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
/// <inheritdoc />
public override void OnCreate()
{
base.OnCreate();
CalligraphyConfig.InitDefault(
new CalligraphyConfig.Builder()
.SetDefaultFontPath("fonts/myfont.ttf")
.SetFontAttrId(Resource.Attribute.fontPath)
.Build()
);
}
}