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);