您的位置:首页 > 移动开发 > Android开发

Android5.0源码开发之launcher切换语言后Folder和ShortcutT没有切换到当前语言

2015-09-17 19:44 525 查看
一、桌面快捷方式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);
}

        }

当然,如果再人为的添加文件夹或重命名其他名字,切换语言是不会更新的,因为没有对应的其他语言的字符串
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息