我正在开发一个Android应用程序。在我的应用程序中,我使用了多种语言。我完全本地化了。但是我对它有一个问题。目前,我的应用程序将支持两种语言。但我的问题是,当用户更改语言时,我想要更改所有TextView、EditText、按钮等的字体。
这就是当语言改变时我如何以编程方式设置字体:
if(Language=="mm")
{
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/tharlon.ttf");
icBtnFindPlaces.setTypeface(tf);
}
else{
Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/inconsolata.ttf");
icBtnFindPlaces.setTypeface(tf);
}
正如你在上面看到的,我对每一个有文本的视图都这样做了。这不是一个好方法。我想要的是为所有视图全局设置字体,而不是逐个设置。有可能吗?
发布于 2016-06-04 15:29:41
嗨,这是一个很好的例子。
如果有许多需要设置外部字体TextViews,那么您必须创建一个您自己的自定义TextView,并如下所示设置字体:
将FontManager添加为单个Java类
public class FontManager {
public static Typeface light;
public static Typeface medium;
public static Typeface regular;
private static FontManager instance;
private AssetManager mgr;
private FontManager(AssetManager _mgr) {
this.mgr = _mgr;
lght = Typeface.createFromAsset(mgr,"---.ttf");
medium = Typeface.createFromAsset(mgr,"---.ttf");
regular = Typeface.createFromAsset(mgr,"---.ttf");
}
public static FontManager init(AssetManager mgr) {
if(instance != null)
return instance;
return instance = new FontManager(mgr);
}
public static FontManager getInstance() {
return instance;
}
private String fixAssetFilename(String asset) {
// Empty font filename?
// Just return it. We can't help.
if (asset.length() == 0)
return asset;
return asset;
}
}
在您的Splash活动中将其称为:
FontManager.init(getApplicationContext().getAssets());
public class LightTextView extends TextView {
public LightTextView(Context context) {
super(context);
}
public LightTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if(context.getString(R.string.lang).equals("en"))
setTypeface(FontManager.light);
else
setTypeface(FontManager.medium);
}
}
Add values --> string.xml
<string name="lang">en</string>
values-fr --> string.xml
<string name="lang">fr</string>
<com.exa.fonttest.LightTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:textSize="20sp"
android:textColor="@color/white"
android:text="Good luck"/>
更改区域设置时会自动更改字体。
祝好运。
https://stackoverflow.com/questions/37627255
复制相似问题