我正在开发一款Android应用。在我的应用程序中,我使用多种语言。我完全是本地化的。但我遇到了问题。目前,我的应用程序将支持两种语言。但我的问题是,当用户更改语言时,我想更改所有TextView,EditText,Button等的字体。请参阅下面的方案。
这就是我在语言改变时以编程方式设置字体的方式:
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);
}
正如您在上面所看到的,我已经为每个带有文本的视图执行此操作。这不是一个好方法。我想要的是我想为所有视图设置全局字体,而不是逐个设置。有可能吗?
答案 0 :(得分:0)
嗨,这是一个很好的例子。
如果有许多TextView需要设置外部字体,那么你必须创建一个自己的自定义TextView并设置如下字体:
将 FontManager 添加为Singleton 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 Activity中将其称为:
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"/>
更改区域设置时会自动更改字体。
祝你好运。