更改区域设置是修改我的应用程序的文本尺寸

时间:2014-07-23 09:37:21

标签: java android locale

我正在尝试更改Android应用中的语言,而我正在使用此代码:

String languageToLoad  = "en";
Locale locale = new Locale(languageToLoad); 
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, 
getBaseContext().getResources().getDisplayMetrics());

我已经创建了不同的values目录(\values-fr\values-it等),我放了string.xml个文件。

更改语言正常,但问题是它正在改变我的应用程序中的文本尺寸(文本视图,菜单,对话框,edittexts,按钮上的文本大小......基本上在我的所有应用程序中)。

删除更改区域设置的区块代码,应用布局恢复正常。 getDisplayMetrics()是否会产生问题?

我正在使用某些文字的样式:

<style name="title_font">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textColor">#095080</item>
        <item name="android:textSize">26sp</item>
        <item name="android:textStyle">bold</item>
</style> 

一些textview的例子:

<TextView
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="15dp"
        style="@style/title_font"
        android:text="@string/login_title" />

<TextView
      android:id="@+id/label_user"
      android:textStyle="bold"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="50dp"
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="@string/user_label"
      android:layout_below="@+id/login"/>

你能告诉我为什么会发生这种情况以及如何解决这个问题? 如果您需要任何其他信息,请询问。

1 个答案:

答案 0 :(得分:3)

经过几个小时的搜索,我在评论中找到了解决方案:Android changing language configuration messes up layout

基本上你必须更换

Configuration config = new Configuration();

Configuration config = getBaseContext().getResources().getConfiguration();

这样,您不会创建新配置,只会修改现有配置。