0

FragmentActivity を拡張するクラスがあり、作成した Fragment 内には textView しかありません。

ユーザーがこのtextViewのフォントタイプを変更できる設定ボタンをアクションバーに配置したいと思います(すでに完了しています)。

どうすればこれを達成できますか?

FragmentActivity の Fragment の数が先験的にわかっていないという別の問題があります。そのため、フォント タイプを変更するときは、すべての 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

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

}
于 2013-08-21T14:01:46.263 に答える
0

Utils.java という名前のクラスを 1 つ作成し、次のメソッドを配置します。

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 に答える