我需要将应用程序的字体更改为自定义字体。我为此使用了Android Native Fonts。我在字体文件夹中添加了my_font.ttf和my_font_italic.ttf。
另外,我创建了这个字体系列资源
<?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
android:fontStyle="normal"
android:font="@font/my_font"
app:fontStyle="normal"
app:font="@font/my_font"/>
<font
android:fontStyle="italic"
android:font="@font/my_font_italic"
app:fontStyle="italic"
app:font="@font/my_font_italic"/>
</font-family>
在我的布局上,我有一个带有几个TextView的LinearLayout:
<LinearLayout
android:id="@+id/test"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:textAppearance="@style/text_28_italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/my_font"
android:text="Test Text"/>
<TextView
android:textAppearance="@style/text_28_bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/my_font"
android:text="Test Text"/>
</LinearLayout>
我使用的样式是:
<style name="text_28_italic">
<item name="android:fontFamily">@font/my_font</item>
<item name="android:textSize">28sp</item>
<item name="android:textStyle">italic</item>
</style>
<style name="text_28_bold">
<item name="android:fontFamily">@font/my_font</item>
<item name="android:textSize">28sp</item>
<item name="android:textStyle">bold</item>
</style>
如果我测试应用程序,文本视图中的字体会正确显示。
但是,当我尝试按代码添加TextView时,会出现问题。根据{{3}},我需要使用Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
按代码设置字体。但我也需要设置一种风格,所以我也使用setTextAppearance()
。
这是我的代码:
TextView tv1 = new TextView(this);
tv1.setText("Test text");
tv1.setTypeface(ResourcesCompat.getFont(this, R.font.my_font));
tv1.setTextAppearance(this, R.style.text_28_italic);
((LinearLayout) findViewById(R.id.test)).addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText("Test text")
tv2.setTextAppearance(this, R.style.text_28_bold);
tv2.setTypeface(ResourcesCompat.getFont(this, R.font.my_font));
((LinearLayout) findViewById(R.id.test)).addView(tv2);
这样,我无法使其发挥作用。我得到了应用的字体,但不是文本外观。
如何以编程方式使文本外观和字体工作?
谢谢!
答案 0 :(得分:1)
Typeface typeface = ResourcesCompat.getFont(this, R.font.roboto);
.............或........................
Typeface typeface = getResources.getFont(R.font.roboto);
textView.setTypeface(typeface);
答案 1 :(得分:0)
将.ttf字体复制到资产文件夹。然后创建字体并将其应用到您的小部件,如下所示。
Typeface tf = Typeface.createFromAsset(getActivity().getAssets(),"YourFontName.ttf"); //you can use your activity name instead of getActivity().
TextView tv = (TextView) getActivity().findViewById(R.id.tv1);
tv.setTypeface(tf);
要在代码下方更改外观使用。
tv.setTextAppearance(this, android.R.style.TextAppearance_Large);
tv.setTypeface(tv.getTypeface(),Typeface.BOLD);
答案 2 :(得分:0)
或者,您可以使用Calligraphy Library通过XML在此应用中设置自定义字体,
<TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" fontPath="fonts/Roboto-Bold.ttf"/>
TextAppearance中的自定义字体
<style name="TextAppearance.FontPath" parent="android:TextAppearance"> <!-- Custom Attr--> <item name="fontPath">fonts/RobotoCondensed-Regular.ttf</item> </style> <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="@style/TextAppearance.FontPath"/>
样式中的自定义字体
<style name="TextViewCustomFont"> <item name="fontPath">fonts/RobotoCondensed-Regular.ttf</item> </style>
在主题中定义的自定义字体
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item> </style> <style name="AppTheme.Widget"/> <style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView"> <item name="fontPath">fonts/Roboto-ThinItalic.ttf</item> </style>