34

私のアプリケーションでは、すべてのテキストビューと編集テキスト フィールドに helvetica フォントを使用する必要があります。すべての textview に settypeface メソッドを使用する以外にこれを行う方法はありますか? どんな提案でも大いに役立ちます。

前もって感謝します !

4

8 に答える 8

64

私は自分でそれを理解しました。これは私が使用したコードです。TextViewカスタムフォントをデフォルトフォントとして持つカスタムを作成します。

public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyTextView(Context context) {
        super(context);
        init();
    }

    private void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
        setTypeface(tf ,1);

    }

}
于 2011-12-30T05:21:33.543 に答える
27

あなたの活動では、あなたが電話した直後に

setContentView(R.id.blahblah);

ウィジェットの階層全体を調べて、フォントの置換を処理するメソッドを実行する必要があります。

setContentView(R.id.blahblah);
Utils.overrideFonts(this, findViewById(android.R.id.content));

そして、前述の「overrideFonts」メソッドは次のようになります。

public static void overrideFonts(final Context context, final View v) {
    try {
        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;
            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                overrideFonts(context, child);
            }
        } else if (v instanceof TextView) {
            ((TextView)v).setTypeface(FONT_REGULAR);
        }
    } catch (Exception e) {
        e.printStackTrace();
        // ignore
    }
}

このスキームでは、FONT_REGULAR は安全な場所で初期化する必要があります。適切に初期化されることを確認するために、シングルトンまたはその他の方法を考えることができます...

private static void initializeFonts(final Context context) {
    FONT_REGULAR = Typeface.createFromAsset(context.getAssets(), "fonts/myfont_medium.otf");
    FONT_BOLD = Typeface.createFromAsset(context.getAssets(), "fonts/myfont_bold.otf");
}

MyAppActivity (Activity を拡張) のような Activity のサブクラスを使用する場合、そのようなカスタマイズのためにすべての Activity クラスを変更する必要はありません。代わりに、それに切り込んで動作をオーバーライドすることができます。

public class MyAppActivity extends Activity {
... ...
    @Override
    public void setContentView(final int layoutResID) {
        super.setContentView(layoutResID);
        Utils.overrideFonts(this, findViewById(android.R.id.content));
    }
... ...
}

このようにして、自分のアクティビティを使用して共通の動作を行うことができます。

public class SettingsUI extends MyAppActivity {
... ...
} 

お役に立てば幸いです...乾杯!

于 2011-09-02T15:12:33.380 に答える
9

スタイルを作成し、すべてのテキスト属性を使用します。

<style name="CustomText">
    <item name="android:typeface">YourFontName</item>
</style>

これを使って:

<TextView style="@style/CustomText" />

上記は、使用できるカスタマイズのためにすべてのアクティビティでカスタムフォントを使用することです....

Typeface font = Typeface.createFromAsset(getAssets(), "CustomFontName.ttf");  
txt.setTypeface(font);

これを試して。

于 2011-08-03T12:25:30.610 に答える
0

できますが、基本的に作成したいのは、マップ形式のフォント アトラスです (!"#$% '()x+,-./ で始まる Unicode 順で実行する必要があります)。文字列を取り込んで、対応する各文字がアトラスのどこにあるかを調べます。

それは簡単ではありませんが、各文字の長さと幅は同じでなければなりません。

于 2011-08-03T12:33:43.160 に答える