为完整的安卓应用程序添加自定义字体

13 浏览
0 Comments

为完整的安卓应用程序添加自定义字体

在我的应用程序中,我需要为所有的文本视图和编辑文本字段使用Helvetica字体。除了为每个文本视图使用settypeface方法之外,还有其他方法可以实现吗?任何建议都将是非常有帮助的。提前感谢!

0
0 Comments

问题的出现原因是需要为整个Android应用程序添加自定义字体。解决方法是创建一个自定义的TextView类,其中包含了默认字体为自定义字体的代码。通过重写TextView类,可以在布局文件中直接使用MyTextView,而无需在活动/片段中以编程方式实现自定义字体。

以下是解决方法的代码示例:

public class MyTextView extends TextView {
    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public MyTextView(Context context) {
        super(context);
        init();
    }
    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
        setTypeface(tf ,1);
    }
}

解决方法中还提到了一个很好的教程,可以参考这个教程来实现添加自定义字体的功能。

文章的完整内容如下:

我自己解决了这个问题。这是我使用的代码。我创建了一个自定义的TextView类,其中默认字体是自定义字体。

public class MyTextView extends TextView {
    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    public MyTextView(Context context) {
        super(context);
        init();
    }
    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
        setTypeface(tf ,1);
    }
}

通过重写TextView类,他能够在布局文件中使用MyTextView,而无需在活动/片段中以编程方式实现自定义字体。

这里有一个很好的教程可供参考:barebonescoder.com/2010/05/…。如果您想考虑不同的字体系列类型,比如粗体或斜体,您可以使用不同的ttf文件。您可以在init方法中使用this.getTypeface().getStyle()来处理这个问题,并为TextView使用不同的字体。希望对您有所帮助。

以上链接中只有广告和相关链接,没有任何内容,只有广告

0
0 Comments

问题的原因是在安卓应用程序中添加自定义字体时,部分界面的字体没有被替换。解决方法是在每个activity的setContentView之后,调用一个方法来遍历整个widget层级并处理字体替换。该方法应该包含一个overrideFonts方法,用来实现字体替换的逻辑。在这个方案中,需要在某个地方安全地初始化FONT_REGULAR变量,可以使用单例模式或其他方式来确保其正确初始化。如果使用Activity的子类MyAppActivity,可以通过重写setContentView方法来实现统一的字体替换行为。这样就可以在任何自定义的activity中实现相同的字体替换行为。对于ListView中的项,需要在...ItemAdapter类中进行处理。至于ActionBar中的字体和Fragment中的TextView,以上方法都不起作用。

以下是整理后的文章:

在安卓应用程序中添加自定义字体时,有一些界面的字体无法被替换。解决这个问题的方法是在每个activity的setContentView方法之后,调用一个方法来遍历整个widget层级并处理字体替换。具体的实现方法如下:

public static void overrideFonts(final Context context, final View v) {
    try {
        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;
            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                overrideFonts(context, child);
            }
        } else if (v instanceof TextView) {
            ((TextView)v).setTypeface(FONT_REGULAR);
        }
    } catch (Exception e) {
        e.printStackTrace();
        // ignore
    }
}

在这个方法中,需要确保FONT_REGULAR变量被安全地初始化。可以使用单例模式或其他方式来达到这个目的。另外,如果使用Activity的子类MyAppActivity,可以通过重写setContentView方法来实现统一的字体替换行为。具体的实现代码如下:

public class MyAppActivity extends Activity {
... ...
    public void setContentView(final int layoutResID) {
        super.setContentView(layoutResID);
        Utils.overrideFonts(this, findViewById(android.R.id.content));
    }
... ...
}

这样,就可以在任何自定义的activity中实现相同的字体替换行为。然而,需要注意的是,以上方法对于ListView中的项以及Fragment中的TextView都不起作用。对于这些情况,需要在相应的类中进行处理。

0
0 Comments

问题的原因是android:typeface字段只允许使用内置的字体名称,无法使用位于asset文件夹中的自定义字体名称。解决方法是创建一个样式,并在所有文本属性中使用它。然后可以使用createFromAsset()方法从asset文件夹中创建一个Typeface对象,并将其应用于TextView的字体。这样可以实现在整个应用程序中添加自定义字体的效果,而不需要为每个TextView都使用setTypeface()方法。

以下是解决问题的完整代码:

// 创建一个样式并设置所有文本属性

// 使用样式

// 从asset文件夹中创建Typeface对象并应用于TextView的字体
Typeface font = Typeface.createFromAsset(getAssets(), "CustomFontName.ttf");
txt.setTypeface(font);

这样,就可以在整个应用程序中添加自定义字体,而不需要为每个TextView都使用setTypeface()方法。

0