更改语言环境后字体不同?

4

我可以帮您进行翻译。以下是需要翻译的内容:

我做了一个安卓应用程序,支持两种语言(英语和希腊语),我想在设备使用英语语言环境时,它所使用的字体与希腊语言环境下不同。

我使用了

String loc = Locale.getDefault().getISO3Language();

我需要获取iso3Language(eng,ell,deu等),然后使用if命令进行操作。

if(loc=="eng"){
        Typeface font1 = Typeface.createFromAsset(getAssets(), "MISTRAL.TTF");
        txt1.setTypeface(font1);
        txt1.setText(R.string.app_name);
    }
    else{
        Typeface font1 = Typeface.createFromAsset(getAssets(), "SNAP.TTF");
        txt1.setTypeface(font1);
        txt1.setText(R.string.app_name);
    }

但是它无法识别它,即使我使用英语区域设置,它也执行代码的else部分!您能帮助我吗?谢谢!
2个回答

3
我认为你的方法是错误的。这可以在资源级别上轻松完成。不需要任何代码!
在英语版本(和所有其他语言)的'res/values'目录中创建具有值的xml文件。 在此文件中创建新的样式,设置字体。它将看起来更或多或少像这样(我这里没有SDK,所以可能会有一些错误):
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="CustomText" parent="@style/Text">
        <item name="android:typeface">MISTRAL.TTF</item>
        <item name="android:textColor">#008</item>
    </style>
</resources>

在'res/values-el'(希腊语,现代)中创建相同的文件,并定义相同的样式(只需复制粘贴),但使用替代字体。
在您的布局文件中,在需要根据区域设置字体的所有位置应用此样式。有一个名为“style”的属性(它没有命名空间)需要为视图设置。自动完成应该会帮助您。

我相当确定你不能在styles.xml中突然使用MISTRAL.TTF - John61590
显然你是对的。我没有时间验证这个。至少这适用于自定义字体。有一个解决方法:https://dev59.com/mmw15IYBdhLWcg3wO5OX#6746775。最坏的情况下,我会在xml中使用自定义值,并在代码中使用这个值,但链接的解决方案看起来更好。 - Marek R

1
在Java中,你不能使用“==”来比较字符串。请改用equals方法。
请参考本教程以获得更深入的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接