2

titleFont と contentFont 書体を返すメソッドを作成して、参照を返すだけで効率が向上し、コードの長さが短縮されるようにしようとしています。簡単なことはわかっていますが、うまくいきません。誰でも助けてください。または任意の代替手段をいただければ幸いです..悪い英語で申し訳ありません

これは、数回実行されるメソッドです..

protected void onPostExecute(Article result) {
    super.onPostExecute(result);

    TextView txtTitle= (TextView) view.findViewById(R.id.title);
    txtTitle.setTypeface(titleFont);
    txtTitle.setText(result.getTitle());

    private Typeface titleFont=Typeface.createFromAsset(context.getAssets(),"fonts/InterstateCondMonoLgt.ttf");
    private Typeface contentFont=Typeface.createFromAsset(context.getAssets(),"fonts/InterstateLight.ttf");

    TextView txtMain= (TextView) view.findViewById(R.id.main);
    txtMain.setTypeface(contentFont);
    txtMain.setText(result.getContent());
}
4

4 に答える 4

6

これがお役に立てば幸いです;)

FontUtil クラス

public class FontUtil {

    private static Typeface mTitleFont;
    private static Typeface mContentFont;

    public static enum FontType {

        TITLE_FONT {
            public String toString() {
                return "fonts/InterstateCondMonoLgt.ttf";
            }
        },

        CONTENT_FONT {
            public String toString() {
                return "fonts/InterstateLight.ttf";
            }
        }
    }

    /**
     * @return Typeface Instance with the font passed as parameter
     */
    public static Typeface getTypeface(Context context, String typefaceName) {
        Typeface typeFace = null;

        try {
            if (typefaceName.equals(FontType.TITLE_FONT.toString())) {
                if (mTitleFont == null) {
                    mTitleFont = Typeface.createFromAsset(context.getAssets(), typefaceName);
                }
                typeFace = mTitleFont;
            } else if (typefaceName.equals(FontType.CONTENT_FONT.toString())) {
                if (mContentFont == null) {
                    mContentFont = Typeface.createFromAsset(context.getAssets(), typefaceName);
                }
                typeFace = mContentFont;
            } 
        } catch (Exception ex) {
            typeFace = Typeface.DEFAULT;
        }

        return typeFace;
    }

    /**
     * @return Typeface Instance with the font passed as parameter
     */
    public static Typeface getTypeface(Context context, FontType typefaceName) {
        return getTypeface(context, typefaceName.toString());
    }
}

クライアント

protected void onPostExecute(Article result) {
    super.onPostExecute(result);

    TextView txtTitle= (TextView) view.findViewById(R.id.title);
    txtTitle.setTypeface( FontUtil.getTypeface(mContext, FontType.TITLE_FONT) );
    txtTitle.setText(result.getTitle());

    TextView txtMain= (TextView) view.findViewById(R.id.main);
    txtMain.setTypeface( FontUtil.getTypeface(mContext, FontType.CONTENT_FONT) );
    txtMain.setText(result.getContent());
}
于 2013-09-17T10:47:08.357 に答える
1

プロジェクトで1つのユーティリティクラスを作成できます

private Typeface titleFont=Typeface.createFromAsset(context.getAssets(),"fonts/InterstateCondMonoLgt.ttf");
private Typeface contentFont=Typeface.createFromAsset(context.getAssets(),"fonts/InterstateLight.ttf");

そして、次のようにゲッターを書くだけです

public Typeface getTitleFont() {
    return titleFont;
}

または、私がもっと好きなのは、継承したクラスがある場合は、次のように基本クラスに入れます。

public static Typeface titleFont;

その後

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    titleFont=Typeface.createFromAsset(context.getAssets(),"fonts/InterstateCondMonoLgt.ttf");
}

このようにして、必要な場所でいつでもフォントを呼び出すtextView.setTypeface(titleFont);ことができます

于 2013-09-17T10:41:01.463 に答える
0

いくつかの util クラスを作成し、そこにすべてのコードを次のように配置します。

public class Utils
{
    public static Typeface getTitleFont()
    {
        return Typeface.createFromAsset(getApplicationContext().getAssets(),"fonts/InterstateCondMonoLgt.ttf");
    }
}

そして、このように使用します:

TextView txtMain= (TextView) view.findViewById(R.id.main);
txtMain.setTypeface(your_package.Utils.getTitleFont());
于 2013-09-17T10:42:40.320 に答える
0

特定のメソッド内で作成されたすべての変数は、それ自体がプライベートです。メソッド内で宣言された変数にアクセス修飾子を与えることはできません。コンパイルエラーが発生します。この書体変数をクラス レベル変数として宣言し、ASYNCTASK のコンストラクター内で初期化することをお勧めします。そうしないと、onPostExecute() が呼び出されるたびに書体が作成され、後でメモリ オーバーヘッドが発生する可能性があります。

于 2013-09-17T10:40:32.917 に答える