0

我有一个扩展 FragmentActivity 的类,在我创建的 Fragment 内部只有一个 textView。

我想在操作栏上放置一个设置按钮(已经完成),可以让用户更改此 textView 的字体类型。

我怎么能做到这一点?

我还有另一个问题,FragmentActivity 中的 Fragment 数量是先验未知的……所以当我更改字体类型时,我想更改每个 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..
        }

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

4

2 回答 2

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
于 2013-08-21T13:58:07.030 回答
0

您还可以创建 TextView 的子类并在其中设置字体。上下文对象包含 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;
  }

}
于 2013-08-21T14:01:46.263 回答