Android Studio 预览中的字体已更改,但设备中未更改

Font gets changed in Android Studio preview but not in the device

我创建了一个应用于 TextView 的样式。它按我的意愿出现在 Android Studio 预览中,但在设备上却有所不同。我能做什么?

这是XML代码:

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
    style="@style/smalltextstyle"
        android:text="text here "
     />
</ScrollView>

这是我的风格代码:

<style name="smalltextstyle">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:textAlignment" tools:targetApi="jelly_bean_mr1">center</item>
    <item name="android:textSize">23sp</item>
    <item name="android:textColor">#000</item>
    <item name="android:textStyle">bold</item>

必须如此

这就是显示的内容

在下面 class 使用这个作为你的 customTextview 并在 assets 文件夹中下载你的字体

xml

例如:

 <com.yourpackagename.font.MyTextView
                android:id="@+id/text_phone_number"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/text_phone_number"
                android:textColor="@color/colorDarkAsh_opacity"
                android:layout_marginTop="20dp"
                android:layout_marginStart="10dp"
                android:textSize="12sp"/> 

Class

public class MyTextView extends AppCompatTextView {

    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() {
        if (!isInEditMode()) {
            Typeface tf;

            switch (getTypeface().getStyle()) {
                case Typeface.BOLD:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/AvenirLTMedium.otf");
                    break;

                case Typeface.ITALIC:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/AvenirLTBookOblique.otf");
                    break;

                case Typeface.BOLD_ITALIC:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/AvenirLTMediumOblique.otf");
                    break;

                case Typeface.NORMAL:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/AvenirBook.otf");
                    break;

                default:
                    tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/AvenirBook.otf");
                    break;

            }

            setTypeface(tf);
        }
    }

}