Android Launcher研究之桌面圖示重新命名
阿新 • • 發佈:2019-01-24
閒話少敘,目前原生的Launcher,只有桌面上的資料夾支援重新命名。第三方軟體如ADW,GOLauncher等長按桌面圖示之後在彈出的popup框中也有了重新命名選項。本文意在給出此功能實現的demo,如果你有不同的觀點,也請多多指教。
1.獲取桌面圖示的資訊。
當我們長按桌面圖示時,會執行Workspace.java中的方法 startDrag(CellLayout.CellInfo cellInfo),其引數cellInfo即為操作物件。
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);
}
}
關鍵程式碼已全部貼出,歡迎各位多多指教!轉載請註明作者和出處,謝謝!
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);
}
}
關鍵程式碼已全部貼出,歡迎各位多多指教!轉載請註明作者和出處,謝謝!