1. 程式人生 > >Android Launcher研究之桌面圖示重新命名

Android Launcher研究之桌面圖示重新命名

  閒話少敘,目前原生的Launcher,只有桌面上的資料夾支援重新命名。第三方軟體如ADW,GOLauncher等長按桌面圖示之後在彈出的popup框中也有了重新命名選項。本文意在給出此功能實現的demo,如果你有不同的觀點,也請多多指教。

1.獲取桌面圖示的資訊。
  當我們長按桌面圖示時,會執行Workspace.java中的方法 startDrag(CellLayout.CellInfo cellInfo),其引數cellInfo即為操作物件。

  過程分析:新增到桌面上的app圖示,陣列會儲存其相應資訊CellInfo。長按時會響應手指移動的onInterceptTouchEvent事件,並根據移動時的座標來與陣列中的app的資訊比較,若手指移動到app的桌面有效區域,app長按事件響應。

View child = cellInfo.cell;
ItemInfo info = (ItemInfo)child.getTag();  //Get the app Info

2.建立能夠重新命名的對話方塊。
對話方塊的作用是為了記錄輸入,並將其作為該圖示新的名字。
EidtName = mEditInput.getText().toString(); //Get the new name 

3.修改桌面圖示
桌面上的app,即快捷方式,從安裝包獲取得Icon和Title並將其顯示於桌面。
修改資訊:
ShortcutInfo mShortcutInfo = (ShortcutInfo)info;    
mShortcutInfo.setTitle(EidtName);//Set ShortcutInfo Title

修改名字:
View v = mWorkspace.getViewForTag(mShortcutInfo); //Get View for ShortcutInfo
mShortcutInfo.title = EidtName;
((BubbleTextView)v).setText(EidtName);//Set View Title

補充:google提供了修改桌面快捷方式圖示以及名字的介面,本文只做修改名字的分析。

4.儲存資料庫
LauncherModel.updateItemInDatabase(Launcher.this,mShortcutInfo);

5.重新載入
在載入桌面佈局時,呼叫方法LauncherModel.loadWorkspace()中獲取app資訊getShortcutInfo();
其預設是先從包管理器中獲得,而非從資料庫中載入。這裡要改變其載入順序。 

        // from the db
        if (c != null) {
            info.title =  c.getString(titleIndex);
        }

        // from the resource
        if (info.title == null) {
            if (resolveInfo != null) {
                info.title = resolveInfo.activityInfo.loadLabel(manager);
            }
        }

關鍵程式碼已全部貼出,歡迎各位多多指教!轉載請註明作者和出處,謝謝!