Android2.2更改语言时的Bug dota2 更改匹配语言

转载自:http://yueguc.javaeye.com/blog/824642

现象:Setting -> Language&Locale设置后中文后,大部分应用程序及相关点都变为中文,但Launcher中所有项该是英文还是英文,Reboot后变为中文。原因是Launcher中没有做相应语言变更处理,做如下修改,添加消息注册函数,重新加载AllApps项!

enginer@root # git diff
src/com/android/launcher2/Launcher.java
patch | blob| history
src/com/android/launcher2/LauncherModel.java
patch | blob| history
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 84ee599..551a43e 100644 (file)
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -75,7 +75,8 @@
android:stateNotNeeded="true"
android:theme="@style/Theme"
android:screenOrientation="nosensor"
-android:windowSoftInputMode="stateUnspecified|adjustPan">
+android:windowSoftInputMode="stateUnspecified|adjustPan"
+android:configChanges="locale">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.HOME" />

diff --git a/src/com/android/launcher2/Launcher.javab/src/com/android/launcher2/Launcher.java
index 6bd915a..e333bc5 100644 (file)
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -2303,4 +2303,14 @@ public final class Launcher extendsActivity
mAllAppsGrid.dumpState();
Log.d(TAG, "END launcher2 dump state");
}
+
+ // Forcereload all apps list when locale changes
+@Override
+ public voidonConfigurationChanged(Configuration newConfig) {
+super.onConfigurationChanged(newConfig);
+checkForLocaleChange();
+mModel.setAllAppsLoaded(false); // Set force load all appslist;
+mModel.startLoader(this, true); // Reload apps list
+ }
+
}
diff --git a/src/com/android/launcher2/LauncherModel.javab/src/com/android/launcher2/LauncherModel.java
index 17f7573..4915466 100644 (file)
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -86,6 +86,11 @@ public class LauncherModel extendsBroadcastReceiver {
private Bitmap mDefaultIcon;
+ public voidsetAllAppsLoaded(boolean load) {
+mAllAppsLoaded = load;
+ }
+
Android2.2更改语言时的Bug dota2 更改匹配语言
public interface Callbacks {
public int getCurrentWorkspaceScreen();
public void startBinding();

在 1.6 的 calendar 里,当系统语言改变时, calendar widget 上的语言并没有随着改变。其实这个 bug 在android 的很多系统程序里都会出现。只要不是把 string 提取出来的,就都要响应“android.intent.action.CONFIGURATION_CHANGED”,为UI 做一次 update 。

这个 bug 在 HTC的 magic 上同样会出现。

在 1.6 的SDK 里,“android.intent.action.CONFIGURATION_CHANGED”本来就是有bug 的。网上居然没人讨论过这个问题。我们都知道,可以写一个 broadcastReceiver 来接受各种各样的 Notification, 但是,假如你的 broadcastReceiver 的 intentfilter 里允许了接收CONFIGURATION_CHANGED,那好,你的这个 AP 里面就不能再接收其它的通告,要不然,在开机的时候会出现错误提示:你的程序没响应!

不仅如此,假如我接收了ACTION_CONFIGURATION_CHANGED ,但是我还想知道,这到底是由语言改变引起的呢?还是屏幕旋转了?会不是在extra 里给出信息?

我追了一下源码,在ActivityManagerService.java,有方法updateConfigurationLocked,这里是系统发送通告的地方:

1Intent intent =new Intent(Intent.ACTION_CONFIGURATION_CHANGED);
2broadcastIntentLocked( null ,null ,intent, null , null, 0, null ,null ,
3null , false, false , MY_PID,Process.SYSTEM_UID);

是的,我无法知道是怎样的设置改变。

以上的讨论仅限于 1.6 ,这一切在 2.2的 SDK 里不存在了!( 1.6 于2.2 之间的 SDK 就没考证啦)

同时,在 2.2 里新加了一个通告: ACTION_ CONFIGURATION_CHANGED , 可以通过这个监听到系统语言改变。我也追了一下 2.2 的源码,在老地方:

01Intent intent =new Intent(Intent.ACTION_CONFIGURATION_CHANGED);
02intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
03|Intent.FLAG_RECEIVER_REPLACE_PENDING);
04broadcastIntentLocked( null ,null ,intent, null , null, 0, null ,null ,
05null , false, false , MY_PID,Process.SYSTEM_UID);
06if((changes&ActivityInfo.CONFIG_LOCALE)!= 0 ) {
07broadcastIntentLocked( null ,null ,
08new Intent(Intent.ACTION_LOCALE_CHANGED),
09null , null, 0, null ,null ,
10null , false, false , MY_PID,Process.SYSTEM_UID);
11}

在 froyo 里,当系统语言改变时,会发出两个系统通告,分别是 CONFIGURATION_CHANGED 和 ACTION_LOCALE_CHANGED。

还的明确一点变动: 2.2 的ACTION_CONFIGURATION_CHANGED只能通过 r egisterReceiver ()才会被接收, manifest 里写进去的作废了。

总结:

如何监听系统语言改变?如果是在activity,直接可以用onConfigurationChanged();如果是旧的SDK,只能接收CONFIGURATION_CHANGED,并且这个通告很不好用!在2.2里,ACTION_LOCALE_CHANGED isenough!

  

爱华网本文地址 » http://www.413yy.cn/a/25101017/354250.html

更多阅读

申请韩国签证时的常见问题 美国签证常见问题

韩国旅游发展局广州办事处将于1月30日下午邀请大韩民国驻广州总领事馆签证科相关负责人,在3-5点将与大家共同探讨韩国旅游签证问题,实现一对一咨询解答。现先发布一些申请签证时的常见问题,方便各位亲们参考。1. 本人直接到领事馆申请

2*小苗与大树的对话作者张钫简介 小苗和大树的对话ppt

2*小苗与大树的对话作者张钫简介张钫,女,原名张苒,笔名张苗,2003年5月改名张钫。1989年1月12日出生于北京。现就读于北京市中国人民大学附属中学初中部,今年报考人大附中高中部。张钫出生于一个文学艺术世家,她的父亲是一位著名报告文学作

转载:文书档案归档文件分类时的一些错误

文书档案归档文件分类时的一些错误归档文件分类在文书档案管理中占有很重要的位置,但档案管理人员在进行分类时往往容易出现以下几个方面的错误。一是选择的分类标准交叉。如在选择分类方案时,既使用“机构”,又使用“问题”标准(如综

YET在现在完成时的用法 现在完成时的基本用法

在现在完成时的句子中,already常用于肯定句,yet常用于否定句和疑问句,但yet还有其他用法。1. 用于否定句中,意思是还、尚、迄今、到那时”。例如 he is notyet here. 他还未到。 at three o”clock they had not yet decidedwhether to

声明:《Android2.2更改语言时的Bug dota2 更改匹配语言》为网友隱姓埋名者分享!如侵犯到您的合法权益请联系我们删除