Java 如何更改我的应用程序字体

Java 如何更改我的应用程序字体,java,android,eclipse,android-typeface,Java,Android,Eclipse,Android Typeface,我正在开发一个记事本应用程序,我想使用我的自定义字体,我遵循以下代码 Typeface barType = Typeface.createFromAsset(getApplicationContext().getAssets(),"font/CaviarDreams.ttf"); subject.setTypeface(barType); 但是,我不想使用此代码,因为我必须为每个textview或edittext编写此代码。 有什么方法可以轻松实现这一点吗?您必须在xml中使用子类Te

我正在开发一个记事本应用程序,我想使用我的自定义字体,我遵循以下代码

Typeface barType = Typeface.createFromAsset(getApplicationContext().getAssets(),"font/CaviarDreams.ttf");
    subject.setTypeface(barType);
但是,我不想使用此代码,因为我必须为每个textview或edittext编写此代码。

有什么方法可以轻松实现这一点吗?

您必须在xml中使用子类
TextView
/
EditText

private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/CaviarDreams.ttf");
            setTypeface(tf);
        }
    }

并从构造函数调用
init()
方法自定义
TextView
/
EditText
您需要对EditText进行子类化,并在其构造函数中设置字体

例如:

import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.EditText;

public class EditTextWithFont extends EditText {

    public EditTextWithFont(Context c) {
        super(c);
        init();
    }

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

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

    private void init() {
        if (!isInEditMode()) {
            Typeface barType = Typeface.createFromAsset(getApplicationContext().getAssets(),"font/CaviarDreams.ttf");
            setTypeface(barType);
        }
    }
}

您可以为文本视图和按钮类创建类似的类

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:textViewStyle">@style/RobotoTextViewStyle</item>
    <item name="android:buttonStyle">@style/RobotoButtonStyle</item>
</style>

<style name="RobotoTextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

<style name="RobotoButtonStyle" parent="android:Widget.Holo.Button">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

请用编程方式检查这一点!我想也许我可以在manifest或MainActivity中找到简单的方法来实现这一点?不,没有方法通过xml来实现这一点。不过,您可以访问当前层次结构中的所有视图并应用字体。如果你愿意,我可以展示给你看,但更好的解决方案是子类,如果我无法创建子类的话。为什么你害怕为这些类创建子类?不,我不害怕。我只是找到了最好的方法,我问了你。谢谢所有的答案。最好的解决方案,谢谢:)
<application
    android:theme="@style/AppTheme" >
</application>
public static void setFont(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(Typeface.createFromAsset(context.getAssets(), "fonts/helvetica.ttf"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    View parent = (View)findViewById(R.id.parent);
    Util.setFont(this,parent);