我想说我在设置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等。
有没有其他方法可以做到这一点?
由于
答案 0 :(得分:6)
fontFamily
和typeface
属性与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>