在片段中动态更改textview的字体

时间:2013-08-21 13:54:18

标签: android fonts android-fragments android-fragmentactivity

我有一个扩展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..
        }

我很困惑..你们能帮助我吗?

2 个答案:

答案 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;
  }

}