web-dev-qa-db-ja.com

Android-アプリ全体にカスタムフォントを設定する方法

可能性のある複製:
アプリケーション全体にフォントを設定することは可能ですか?

アプリ全体にカスタムフォント(.ttf形式)を設定する必要がありますが、どうすればよいですか?可能な場合、マニフェストまたはXMLが最適なオプションです

25

2014年9月編集:

このひどい答えをまだ見ている人にとって、本当の、良い答えはここにあります:

https://stackoverflow.com/a/16883281/1154026


OLD:

あなたの最善の策はこれでしょう:

カスタマイズAndroidフォント

そう

    TextView text = (TextView) findViewById(R.id.custom_font);
    Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf");
    text.setTypeface(font);

「assets」フォルダーのルートにある.ttfを使用します。

22
VicVu

このようにすることができます。カスタムテキストビューを作成し、それをどこでも使用する

public class MyTextView extends Android.widget.TextView
{

    public MyTextView(Context context)
    {
        this(context, null);
    }

    public MyTextView(Context context, AttributeSet attrs)
    {
        this(context, attrs, 0);
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs);
        if (this.isInEditMode()) return ;

        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SomeStyle);
        final String customFont = a.getString(R.styleable.SomeStyle_font);

        //Build a custom typeface-cache here!
        this.setTypeface(
            Typeface.createFromAsset(context.getAssets(), customFont)
        );  
    }
}

これをattrs.xmlに追加します

<declare-styleable name="SomeStyle">
    <attr name="font" format="string" />
</declare-styleable>

次に、テーマでこれを行います。これにより、すべてのテキストビューでスタイルMyTextViewが使用されるようになります。

<item name="Android:textViewStyle">@style/MyTextView</item>

これで、このスタイルのカスタム属性を使用してカスタムフォントを定義できます。

<style name="MyTextView" parent="@Android:style/Widget.TextView">
    <item name="font">MyPathToFontInAssets.ttf</item>
</style>

したがって、プロジェクトでMyTextViewを使用するときは常に、カスタムフォントがあります。

重要:書体はキャッシュされないため、このコードを使用する予定がある場合は、カスタム書体キャッシュも構築して、再利用できるようにしてくださいすべてのテキストビューのカスタム書体。これにより、アプリケーションが大幅に高速化されます!

UPDATE:Amirが言っていたように、これは カスタムフォントとXMLレイアウト(Android) とほぼ同じですが、 Androidアプリ内のすべてのテキストビューで自動的に使用するスタイリング。

11
Jelle

TextViewサブクラスを作成し、どこでも使用する

    public class RobotoTextView extends TextView {

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

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

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

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Light.ttf");
            setTypeface(tf);
        }
    }

}

使用法

<com.test.RobotoTextView
        Android:id="@+id/name"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        />

Javaコードでは、TextViewにキャストできます

10
Georgy Gobozov
TextView tv=(TextView)findViewById(R.id.custom);
    Typeface face=Typeface.createFromAsset(getAssets(),
                                          "fonts/Verdana.ttf");

    tv.setTypeface(face);

フォントファイルを/ res /のfontsフォルダーに配置します

役に立つなら私の答えのように...

7
Aditya Nikhade

here のようにTextViewを拡張し、それに書体を設定してアプリ全体で使用できます。

0
Amir