我有一个扩展FragmentActivity的类,在我创建的Fragment中只有一个textView。
我想在操作栏上设置一个设置按钮(已经完成),可以让用户更改此textView的字体类型。
我怎么能得到这个?
我还有另外一个问题,FragmentActivity中的Fragment数量不是先验的... 所以当我改变我的字体类型时,我想改变每个片段。
我试过在我的片段中放置一个方法changefont,但我不知道如何管理..
public void setFont(){
TextView textView = (TextView) getView().findViewById(R.id.detailsText);
textView.setTypeface();
//Another problem how set typeface, because
//Typeface font = Typeface.createFromAsset(getAssets(),"fonts/font.tff"); couldn't work because I'm inside a Fragment and getAssets() just rise errors..
}
我很困惑..你们能帮助我吗?
答案 0 :(得分:0)
创建一个名为Utils.java的类并使用此方法: -
public static void setFontSignika_Bold(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/signikabold.ttf");
textView.setTypeface(tf);
}
现在,您可以通过这种方式在整个应用程序中使用它: -
Utils.setFontSignika_Bold(textView); // Pass your textview object
答案 1 :(得分:0)
您还可以创建TextView的子类并在其中设置字体。 Context对象包含getAssets()方法:)
扩展文本视图的示例实现:
public class TextViewPlus extends TextView {
private static final String TAG = "TextView";
public TextViewPlus(Context context) {
super(context);
}
public TextViewPlus(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
String customFont = a.getString(R.styleable.TextViewPlus_customFont);
setCustomFont(ctx, customFont);
a.recycle();
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), asset);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface: "+e.getMessage());
return false;
}
setTypeface(tf);
setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG | Paint.DEV_KERN_TEXT_FLAG);
return true;
}
}