我想更改完整应用的字体! 但我不知道如何访问完整的应用程序。 我有办法通过Id访问文本,如何更改代码以访问整个App?
public class ExternalFont extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String fontPath = "fonts/FreeUniversal-Regular.ttf";
TextView txtUniversal = (TextView) findViewById(R.id.universal);
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
txtUniversal.setTypeface(tf);
}
}
答案 0 :(得分:1)
要更改应用程序中所有 TextView 的所有字体,您应该创建自定义样式,然后将其添加到 AppTheme 样式中。
`<style name="customTextVeiw" parent="Widget.MaterialComponents.TextView">
<item name"fontFamilt">@font/custom_free_universal_regular</item>`
然后将此样式添加到 AppTheme 样式中的 style.xml 文件中。
`<style name="AppTheme" parent="AppBaseTheme">
<item name="android:textViewStyle">@style/customTextVeiw</item>`
答案 1 :(得分:0)
使用自定义样式创建自己的Textview。
示例:
public class YourTextView extends TextView {
public YourTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public YourTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public YourTextView(Context context) {
super(context);
init();
}
private void init() {
Typeface tf = Typeface.createFromAsset(context.getAssets(),
"fonts/yourfont.ttf");
setTypeface(tf);
}
}
您可以在您的XML中使用。
答案 2 :(得分:0)
不幸的是,没有直接的方法可以通过更改默认字体来更改您在应用中使用的所有TextView的字体。
您可以按照#josedlujan的建议创建自己的自定义TextView并在其上设置字体。但是这种方法的缺陷是每次创建一个TextView对象时,都会创建一个新的Typeface对象,这对于RAM的使用非常不利(对于像Roboto这样的字体,字体对象通常在8-13 kb之间变化)。所以最好在加载后缓存你的字体。
第1步:为您的应用创建字体缓存 -
public enum Font {
// path to your font asset
Y("fonts/Roboto-Regular.ttf");
public final String name;
private Typeface typeface;
Font(String s) {
name = s;
}
public Typeface getTypeface(Context context) {
if (typeface != null) return typeface;
try {
return typeface = Typeface.createFromAsset(context.getAssets(), name);
} catch (Exception e) {
return null;
}
}
public static Font fromName(String fontName) {
return Font.valueOf(fontName.toUpperCase());
}
第2步:在attrs.xml中为CustomTextView定义自己的自定义属性“customFont”
attrs.xml -
<declare-styleable name="CustomFontTextView">
<attr name="customFont"/>
</declare-styleable>
<com.packagename.CustomFontTextView
android:id="@+id/some_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:customFont="rl"/>
第3步:创建自己的自定义TextView
public class CustomFontTextView extends TextView {
public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
public CustomFontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CustomFontTextView(Context context) {
super(context);
init(context, null);
}
private void init(Context context, AttributeSet attrs) {
if (attrs == null) {
return;
}
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView, 0 ,0);
String fontName = a.getString(R.styleable.CustomFontTextView_customFont);
String textStyle = attrs.getAttributeValue(styleScheme, styleAttribute);
if (fontName != null) {
Typeface typeface = Font.fromName(fontName).getTypeface(context);
if (textStyle != null) {
int style = Integer.decode(textStyle);
setTypeface(typeface, style);
} else {
setTypeface(typeface);
}
}
a.recycle();
}
答案 3 :(得分:0)
要对所有应用文本使用字体,您应该在运行 Android 4.1(API 级别 16)及更高版本的设备上使用 XML 中的字体功能。 要将字体添加为资源,请在 Android Studio 中执行以下步骤:
创建字体系列
右键单击字体文件夹,然后转到新建 > 字体资源文件。出现“新建资源文件”窗口。
输入文件名,例如: custom_free_universal_regular.xml ,然后单击确定。新字体资源 XML 在编辑器中打开。
将此添加到 custom_free_universal_regular.xml 文件中。
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/free_universal_regular" /> </font-family>
现在我们可以像这样在我们的应用程序中的任何地方使用这个字体系列
例如,对于所有应用程序,在 style.xml 中使用它
<style name="BaseTheme" parent=""> <item name="fontFamily">@font/custom_free_universal_regular</item>
或在特定元素中像这样使用它
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/custom_free_universal_regular"/>
希望能帮到你。