Android4.4系统设置会多一种语言:Developer Accented English修改问题

关于这个问题,网上有文章说如以下这样修改:

LocalePicker.java
final LocaleInfo[] localeInfos = new LocaleInfo[finalSize -1]; //将这里减1 
for (int i = 0; i < finalSize -1; i++) {  //将这里finalSize 减1
    localeInfos[i] = preprocess[i]; 
("pishum","" + preprocess[i]); 
}

如果真按这样修改,你会遇到这样的问题:

当你编译成eng(工程版本)时,一切正常,去掉了多出的开发者语言,但当编译成user版本,没有插入sim卡时,你会发现设置中的语言选项中少了一种语言,

比如,设置语言本来有英文和中文,这样修改后中文不见了,需插入sim卡后才会出现中文。说明这样修改是不完善的,而且是有问题的。

开发者语言顾名思义是给开发者开的,所以工程版本中是应该有这一种语言显示出来,而user版本才不应该有这种语言,要实现这样的需求,其实不用去去掉

finalSize数组的最后一个元素,可以如下修改:

同样在该类中,

 String displayName = "";
                        if (s.equals("zz_ZZ")) {
                            if(isInDeveloperMode){  //在这里做一个判断,若是开发这模式,就添加该语言
                              displayName = "[Developer] Accented English";
                              Log.i(TAG,"isInDeveloperMode============" + isInDeveloperMode);
                            }
                        } else if (s.equals("zz_ZY")) {
                            displayName = "[Developer] Fake Bi-Directional";
                        } else {
                            displayName = toTitleCase(l.getDisplayLanguage(l));
                        }
                        if (DEBUG) {
                            Log.v(TAG, "adding "+displayName);
                        }
                        preprocess[finalSize++] = new LocaleInfo(displayName, l);
                    }

关于isInDeveloperMode变量,稍微解释一下,这个变量意思就是是否是开发这模式?

可以跟踪就在该类中还有这样一个方法

 protected  boolean isInDeveloperMode() {
        return false;
 }

但这个方法不能直接用在上面做判断条件,因为这个不是静态的,且不能把这个方法改为静态的,因为它要被

alps/packages/app/Settings/src/com/android/settings/LocalPicker.java类中的

@orerride

protected boolean isInDeveloperMode() {
        final boolean showDev = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
                Context.MODE_PRIVATE).getBoolean(
                DevelopmentSettings.PREF_SHOW,
                android.os.Build.TYPE.equals("eng"));

return showDev;

}覆写。该类是继承自

alps/frameworks/base/core/java/com/android/internal/app/LocalPicker.java

而从这个方法能看到,当编译的版本为“eng” 即工程版本是,该方法返回值为true,即显示开发这语言。而若

为user版本,则这里会返回false,可以在这个方法内打应user的值看看:

final boolean notShowDev = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,
                Context.MODE_PRIVATE).getBoolean(
                DevelopmentSettings.PREF_SHOW,
                android.os.Build.TYPE.equals("user"));
          Log.e(TAG, "notShowDev==" + notShowDev);

当编译eng版本时notShowDev的值是false,也就是不显示开发这语言。

所以如此修改这个bug才算没什么sideeffect。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值