一、桌面快捷方式ShortcutT
app的快捷方式一旦生成,info.title都会存到数据库,检测到configuration语言改变时,launcher会重新loadworkspace,这时会从数据库查询info = getShortcutInfo(c, context, iconTypeIndex, iconPackageIndex, iconResourceIndex, iconIndex, titleIndex);我们这时可以考虑重新查询快捷方式对应的laber,具体方法如下:
LauncherModel.java
添加方法
//huageshi start
private CharSequence getShortcutTitle(PackageManager manager, Intent intent) {
ComponentName componentName = intent.getComponent();
if (componentName == null) {
return null;
}
try {
PackageInfo pi = manager.getPackageInfo( componentName.getPackageName(), 0);
if (!pi.applicationInfo.enabled) {
return null;
}
} catch (NameNotFoundException e) {
Log.d(TAG, "getPackInfo failed for package " + componentName.getPackageName());
}
ResolveInfo resolveInfo = manager.resolveActivity(intent, 0);
if (resolveInfo != null) {
return resolveInfo.activityInfo.loadLabel(manager);//重新查询laber
}
return null;
}
//huageshi end
loadWorkspace()方法中添加
----------
synchronized (sBgLock) {
---------
while (!mStopped && c.moveToNext()) {
AtomicBoolean deleteOnInvalidPlacement = new AtomicBoolean(false);
try {
---------
case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
---------
} else {
info = getShortcutInfo(c, context, iconTypeIndex,
iconPackageIndex, iconResourceIndex, iconIndex,
titleIndex);
//huageshi start
CharSequence title = getShortcutTitle(manager, intent);
if(title != null ){
info.title = title;
}
//huageshi end
二、文件夹Folder
由于文件夹的title不能通过packageinfo查询,并且folder都是创建或修改后,title都存入了数据库,每次launcher加载的时候都是folderInfo.title = c.getString(titleIndex);查询,又由于定制的folder文件夹没几个,我们可以考虑在l切换语言后oad的时候去判断folder的title是否是当前语言,然后再重新赋值,具体做法
FolderIcon.java
static FolderIcon fromXml(int resId, Launcher launcher, ViewGroup group,
FolderInfo folderInfo, IconCache iconCache) {
-----
if(folderInfo.title.equals("")){
icon.mFolderName.setText(R.string.folder_hint_text);
} else {
if(Locale.getDefault().getLanguage().equals("en") && folderInfo.title.equals("实用工具")){
icon.mFolderName.setText("ToolBox");
}else{
icon.mFolderName.setText(folderInfo.title);
}
}
当然,如果再人为的添加文件夹或重命名其他名字,切换语言是不会更新的,因为没有对应的其他语言的字符串