AndroidアプリのスタイルXMLを定義しています。使用したいTTFファイルがいくつかあります。これらのファイルを一般的なフォントではなくフォントとして使用するように書体を設定するにはどうすればよいですか? sans」、「serif」および「monospace」。ありがとう
カスタムフォントはJavaコードを介してのみ使用でき、レイアウトXMLまたはスタイル/テーマを介しては使用できません-申し訳ありません!
TextViewPlus.Java:
package com.example;
import Android.content.Context;
import Android.content.res.TypedArray;
import Android.graphics.Typeface;
import Android.util.AttributeSet;
import Android.util.Log;
import Android.widget.TextView;
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);
return true;
}
}
attrs.xml:(res/values)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TextViewPlus">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:foo="http://schemas.Android.com/apk/res/com.example"
Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<com.example.TextViewPlus
Android:id="@+id/textViewPlus1"
Android:layout_height="match_parent"
Android:layout_width="match_parent"
Android:text="@string/showingOffTheNewTypeface"
foo:customFont="saxmono.ttf">
</com.example.TextViewPlus>
</LinearLayout>
assetsフォルダーに「saxmono.ttf」を配置します。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CodeFont" parent="@Android:style/TextAppearance.Medium">
<item name="Android:layout_width">fill_parent</item>
<item name="Android:layout_height">wrap_content</item>
<item name="Android:textColor">#00FF00</item>
<item name="Android:typeface">monospace</item>
</style>
</resources>
リソースフォルダーにフォントディレクトリを作成し、ttfフォントファイルを貼り付けます。次に、フォントリソースXMLを作成し、次の行を貼り付けます。
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:Android="http://schemas.Android.com/apk/res/Android">
<font
Android:fontStyle="normal"
Android:fontWeight="400"
Android:font="@font/roboto_light" />
<font
Android:fontStyle="italic"
Android:fontWeight="400"
Android:font="@font/roboto_light_italic" />
</font-family>
これで、以下のようにフォントを適用できます。属性 'textStyle'にも注意してください
<TextView
Android:textStyle="italic"
Android:fontFamily="@font/family_roboto_light"
Android:textColor="@color/primaryTextColor"
Android:textSize="20sp"
Android:gravity="center"
Android:id="@+id/textView36"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="No Internet connection" />
<TextView
Android:fontFamily="@font/family_roboto_light"
Android:textStyle="normal"
Android:textSize="20sp"
Android:gravity="center"
Android:id="@+id/textView37"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="No Internet connection" />
コードから実行したい場合は、以下のAPIレベル26を使用します
Typeface typeface = getResources().getFont(R.font. roboto_light_italic);
textView.setTypeface(typeface);
Support Library 26.0は、Android 4.1(APIレベル16)以降を実行しているデバイスでXMLフォント機能をサポートします。
Typeface typeface = ResourcesCompat.getFont(context, R.font. roboto_light_italic);