Android:如何为整个应用程序设置自定义字体

4

我开发了一个非常庞大的应用程序,现在需要为应用程序中的所有控件使用自定义字体。因此,我想知道更好的一次性更改字体的方法。该应用程序有100多个XML布局,我不能将所有控件更改为带有自定义字体的自定义组件。请提供一种不需更改所有XML控件而能更改字体的解决方案。


我对你的具体情况不确定,但样式可能会有所帮助。 - Gaurav Agarwal
1个回答

11

可以像这样做

pacage com.prac;
class MyFontedTextView extends TextView {
    public FontedTextView(Context context) {
        super(context);
        init();
    }

    public FontedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public FontedTextView(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
         init();
    }

    private void init() {
     String otfName = "MyCustomOtfFileWhichIPutInAssetsFolder.otf";
     Typeface font = Typeface.createFromAsset(context.getAssets(), otfName);
     this.setTypeface(font);
    }
}

现在将此替换为来自TextView的xml文件中的所有内容

<com.prac.MyFontedTextView ....        instead of <TextView

你需要对这个更改进行全面操作才能应用

对于按钮文本的情况也是如此。按钮也是TextView的子类,因此同样适用于按钮。

希望这可以帮助你找到解决方案。


1
这种方法可以使您受益,因为下次如果您想更改字体,您只需要在一个地方进行更改。 - Rohit Sharma
我知道这个技巧,但问题是我有数百个包含数千个控件的XML页面。我应该更改所有这些控件还是有其他替代方法? - Santosh
2
这将大有裨益: find . -name "*xml" | xargs sed -i 's/<TextView/<com.prac.MyFontedTextView' - JohnnyLambada
如果您有多个文本视图(例如在列表中),您应该确保只访问资源一次。如果您可以使用单个静态Typeface变量,然后引用它,这将极大地提高性能。每次从资源中设置字体会非常缓慢。 - Rarw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接