当我们更改Samsung设备中的设备字体样式时,如何防止TextView字体更改

时间:2013-10-09 09:42:14

标签: android fonts textview typeface

我想说我在设置textview字体时有一个奇怪的问题。 如果我从设置 - >更改设备字体样式显示,然后textview字体样式也会改变。我该如何防止这种情况?

这是我的xml布局中的textview。

<TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/title_bar_bg"
        android:fontFamily="sans-serif"
        android:typeface="sans"
        android:gravity="center"
        android:text="@string/people_finder"
        android:textColor="@color/WHITE"
        android:textSize="18sp"
        android:textStyle="bold">

    </TextView>

机器人:fontFamily中= “无衬线” 机器人:字体= “SANS”

此外,它在三星Galaxy Grand,Samsung Note 2等设备上运行良好。 但不适用于Samsung Note 8,Samsung Note 10.1等。

有没有其他方法可以做到这一点?

由于

4 个答案:

答案 0 :(得分:6)

fontFamilytypeface属性与android原生字体相关。如果您希望TextViews字体始终保持不变,无论设备字体设置如何,您都需要以编程方式设置自定义Typeface

Typeface tf = Typeface.createFromAsset(context.getAssets(), "fontName.ttf"));
TextView textView = (TextView) findViewById(R.id.textView1);
textView.setTypeface(tf);

作为旁注,Calligraphy项目可以直接从布局xml设置自定义字体。

答案 1 :(得分:0)

public class CustomTextView extends TextView {

    Context context;

    public CustomTextView (Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        this.context = context;
    }

    public CustomTextView (Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
    }

    public CustomTextView (Context context) {
        super(context);
        this.context = context;
    }

    public void setTypeface(Typeface tf, int style) {
        if (style == Typeface.NORMAL) {
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeue.ttf")/*
                                                                                                             * ,
                                                                                                             * -
                                                                                                             * 1
                                                                                                             */);
        } else if (style == Typeface.ITALIC) {
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeueItalic.ttf")/*
                                                                                                                 * ,
                                                                                                                 * -
                                                                                                                 * 1
                                                                                                                 */);
        } else if (style == Typeface.BOLD) {
            super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/HelveticaNeueBold.ttf")/*
                                                                                                                 * ,
                                                                                                                 * -
                                                                                                                 * 1
                                                                                                                 */);
        }
    }

}

并将其添加到您的xml中

    <xxx.xxxx.utils.CustomTextView 
        android:id="@+id/login_username_tv"
        android:layout_height="wrap_content"
        android:layout_width="0dp"
        android:layout_weight="0.3"
        android:text="Email"
        android:padding="5dp"
        android:textColor="#333333" 
        android:textSize="12dp"/>

答案 2 :(得分:0)

这在科特林对我有用:

textView.typeface = ResourcesCompat.getFont(this, R.font.opensans_light)

答案 3 :(得分:0)

试试这个,它对我有用...

@Override
public void onConfigurationChanged(Configuration newConfig) {
    if (newConfig.fontScale != 1)
        getResources();
    super.onConfigurationChanged(newConfig);
}

@Override
public Resources getResources() {
    Resources res = super.getResources();
    Configuration newConfig = new Configuration();
    newConfig.setToDefaults();      //Setting the default (1.0f)
    res.updateConfiguration(newConfig, res.getDisplayMetrics());
    
    return res;
}

注意:将 android:configChanges="fontScale" 添加到清单 <activity>