Android 国际化中出现的坑
来源:互联网 发布:mysql下载32位 win7 编辑:程序博客网 时间:2024/05/18 00:08
前言
在做应用的过程中,国际化可以说是我们都会接触的一块。在res文件夹下建立对应国家的values文件夹(可以参考国际化命名规则),里面放上各自语言的strings.xml文件即可
这里不讲国际化,只是记录系统语言发生改变时,应用中语言应用中出现的一个问题,也许还有其他也说不定。
问题
在应用界面打开系统设置更改系统语言,RadioButton 和 CheckBox 在重建之后没有更改语言
原因分析
以下是找的不同源码中的片段
Android 4.4.2 Api 19
@Overridepublic Parcelable onSaveInstanceState() { // Force our ancestor class to save its state setFreezesText(true); Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.checked = isChecked(); return ss;}
Android 4.4W.2 Api 20
@Overridepublic Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.checked = isChecked(); return ss;}
Android 6.0 Api 23
@Overridepublic Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); SavedState ss = new SavedState(superState); ss.checked = isChecked(); return ss;}
从上可以看出,问题出现于Api 20以前,由于方法 setFreezesText(true),通过注释可以看出其作用是强制保存当前的状态;
解决方法
可以参考下面这个回答
Not all items in the layout update properly when switching locales
因为要翻墙,所以作了下摘录,如下:
public class CheckBoxNoPersistentText extends CheckBox { public CheckBoxNoPersistentText(final Context context) { super(context); } public CheckBoxNoPersistentText(final Context context, final AttributeSet attrs) { super(context, attrs); } public CheckBoxNoPersistentText(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); } @Override public void onRestoreInstanceState(final Parcelable state) { final CharSequence text = getText(); // the text has been resolved anew super.onRestoreInstanceState(state); // this restores the old text setText(text); // this overwrites the restored text with the newly resolved text }}
最直接简单粗暴的方式是:
在当前未改变的Activity的onResume()中找到未变化的控件设置其text即可,例如:
@Overrideprotected void onResume() { super.onResume(); my_recorder.setText(R.string.my_recorder); recorder_manager.setText(R.string.recorder_manager); recorder_upload.setText(R.string.recorder_upload);}
问题随时记录,方便日后查找回顾,谨记之。
0 0
- Android 国际化中出现的坑
- JSF 国际化中出现的问题
- iOS 国际化中出现的一个小问题
- 【国际化】Android包的国际化
- Android的国际化
- Android的国际化
- Android的国际化
- Android Studio的国际化
- Android app的国际化
- Android Studio的国际化
- Android的国际化
- android的国际化
- Android的国际化及开发中遇到的问题解决[全]
- Android中样式和国际化
- Android中实现应用程序的国际化与本地化
- 实现Android国际化过程中遇到的问题
- Android中手机信息页面的创建-国际化
- SpringMVC配置国际化出现的异常
- dpkg: error processing package linux-image-generic (--configure): dependency problems - leaving unco
- Erlang(9):常识补充
- 咱们聊聊【BOM】吧
- JAVA中将一个List等分成n个list的工具方法
- GridView分页功能
- Android 国际化中出现的坑
- CentOS6.5下Redis安装与配置
- BZOJ2653——middle
- Flex 页面空白或Error #2032: 流错误处理办法
- 解析BroadcastReceiver之你需要了解的一些东东
- sofelf转jic
- XSLT转换XML
- linux下载命令
- 开始重新找工作了加胡思乱想