更改语言后更改元素的大小
Change size of elements after change language
我在 ZTE Blade Flex (720 x 1280 299ppp) 中更改 APP 的语言时遇到问题。
当您启动APP时,所有尺寸都很好:
似乎是从我为这个尺寸制作的 drawable-sw280-720x1280 文件夹中取出图像(黑色边框)。文字大小取自values-sw280-720x1280文件夹。
APP中的select英文语言选项后,似乎从drawable-sw299dp-720x1280中获取图像(同名图像,但颜色为黄色)和values-sw280-720x1280中的值文件夹:
问题是当我再次 select 西班牙语时。如您所见,第一种情况似乎是从 drawable-sw280-720x1280 文件夹中获取图像,但文本尺寸较小:
我试过以下方法:
1- 只有一个文件夹用于可绘制对象和值。
2- 为可绘制对象和值创建文件夹 sw-299-720x1280。
3- 为可绘制对象和值创建文件夹 sw-280-720x1280。
4- 为可绘制对象和值创建文件夹 hdpi 和 xhdpi。当我尝试这样做时,APP 第一次从 xhdpi 获取图像,在更改为英语后,它从 hdpi 获取图像。
最后,要更改我正在做的语言:
final Configuration config = new Configuration();
if (checkedId == R.id.idRbIdiomaEn) {
config.locale = Locale.ENGLISH;
} else if (checkedId == R.id.idRbIdiomaEs) {
config.locale = new Locale("es", "ES");
}
Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
dialog.dismiss();
startActivity(i);
getActivity().finish();
-我检查过错误只出现在 Android Lollipop 中。
终于找到解决办法了。问题是 APP 在更改成语后引入了新的规模。灵魂是:
Configuration configuration = getResources().getConfiguration();
configuration.fontScale=(float) 1; //0.85 small size, 1 normal size, 1,15 big etc
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);
我在 ZTE Blade Flex (720 x 1280 299ppp) 中更改 APP 的语言时遇到问题。
当您启动APP时,所有尺寸都很好:
似乎是从我为这个尺寸制作的 drawable-sw280-720x1280 文件夹中取出图像(黑色边框)。文字大小取自values-sw280-720x1280文件夹。
APP中的select英文语言选项后,似乎从drawable-sw299dp-720x1280中获取图像(同名图像,但颜色为黄色)和values-sw280-720x1280中的值文件夹:
问题是当我再次 select 西班牙语时。如您所见,第一种情况似乎是从 drawable-sw280-720x1280 文件夹中获取图像,但文本尺寸较小:
我试过以下方法:
1- 只有一个文件夹用于可绘制对象和值。
2- 为可绘制对象和值创建文件夹 sw-299-720x1280。
3- 为可绘制对象和值创建文件夹 sw-280-720x1280。
4- 为可绘制对象和值创建文件夹 hdpi 和 xhdpi。当我尝试这样做时,APP 第一次从 xhdpi 获取图像,在更改为英语后,它从 hdpi 获取图像。
最后,要更改我正在做的语言:
final Configuration config = new Configuration();
if (checkedId == R.id.idRbIdiomaEn) {
config.locale = Locale.ENGLISH;
} else if (checkedId == R.id.idRbIdiomaEs) {
config.locale = new Locale("es", "ES");
}
Intent i = new Intent(getActivity(), MainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION|Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
dialog.dismiss();
startActivity(i);
getActivity().finish();
-我检查过错误只出现在 Android Lollipop 中。
终于找到解决办法了。问题是 APP 在更改成语后引入了新的规模。灵魂是:
Configuration configuration = getResources().getConfiguration();
configuration.fontScale=(float) 1; //0.85 small size, 1 normal size, 1,15 big etc
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
metrics.scaledDensity = configuration.fontScale * metrics.density;
getBaseContext().getResources().updateConfiguration(configuration, metrics);