我正在开发一个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);
}
正如您在上面看到的,我已经为每个带有文本的视图执行此操作。这不是一个好方法。我为什么想要是我想为所有视图全局设置字体,而不是一个接一个。可能吗?
这是一个很好的例子。
如果有许多 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;
}
}
在您的启动活动中将其称为:
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"/>
更改区域设置时会自动更改字体。
祝你好运。