android6.0的Launcher3怎么修改在桌面显示所有APP,怎么设置默认Hotseat?

CikyG 2016-08-27 11:27:47
最近在修改android6.0的源码,其中Launcher3中跟5.1有所改变,判断显示所有app的代码,突然在Hotseat中找不到了,修改桌面上默认应用的布局也不起作用,哪位大神修改过请指教。
...全文
2049 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CikyG 2017-09-04
  • 打赏
  • 举报
回复
引用 8 楼 static_zh 的回复:
楼主,问题解决了吗 我也遇到了这个问题,能不能分享一下解决办法
可以看下9楼的方法,不知道可行不可行,如果可行了分享下。谢谢
CikyG 2017-09-04
  • 打赏
  • 举报
回复
引用 3 楼 u014304560 的回复:
楼主解决这个问题了吗?最近也在搞这个问题,不知道怎么改
不好意思,我也没解决呢,你解决了可以分享下解决方法
xrz992648133 2017-08-14
  • 打赏
  • 举报
回复
大神能详细些吗
桃李不盐 2017-08-02
  • 打赏
  • 举报
回复
引用 9 楼 lanzwu 的回复:
第一个问题我最近也在弄,我的解决办法比较原始,大概说一下,先找到LauncherModel类的LoderTask内部类,然后在run方法中做修改,在方法中的LoadAndBindWorkspace()方法和LoadAndBindWorkspace()方法执行后,添加如下代码和方法:

                .......(run方法中)
                // second step
                if (DEBUG_LOADERS) Log.d(TAG, "step 2: loading all apps");
                loadAndBindAllApps();

                SharedPreferences sp = Launcher.msp;  //在Launcher.java中添加的静态SharedPreferences 
                int appNum = mBgAllAppsList.size();
                if(sp.getBoolean("isfirst",true)){
                    addScreenAndAddItem(appNum);
                    updateWorkspaceScreenOrder(mContext,loadWorkspaceScreensDb(mContext));
                    forceReload();
                    SharedPreferences.Editor editor = sp.edit();
                    editor.putBoolean("isfirst",false);
                    editor.commit();
                }
            }
            ......(run方法中)
            
        public void addScreenAndAddItem(int appNum){
            int screenNum = (int)Math.ceil((double)appNum/30);  //这里的30是一个workspace桌面能承载的最大app数量,我改的是平板5x6界面所以是30个,这个数量可以在一个地方获得,我还没整理好偷懒直接写了
            ContentResolver cr = mContext.getContentResolver();
            Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI;  //获取访问数据库的uri
            int startNum = 0;
            for(int i =1;i<=screenNum;i++) {  //这部分算法写的比较拙略,总之就是向不同屏幕id添加app信息
                int addNum = appNum-30 >= 0 ? 30 : appNum+30*(i-1);
                ContentValues v = new ContentValues();
                v.put(LauncherSettings.WorkspaceScreens._ID, i);
                v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i-1);
                cr.insert(uri,v);
                additem(addNum,startNum,i);
                appNum = appNum - 30;
                startNum = addNum;
            }
        }
        public void additem(int appNum,int startNum,int screen){
            int y = 0;
            for(int i=startNum;i<appNum;i++){
                ShortcutInfo shortcutInfo = new ShortcutInfo(mBgAllAppsList.get(i));
                addItemToDatabase(mContext,shortcutInfo,-100,screen,i%6,y);
                if(i%6==5) {
                    y++;
                }
            }
        }
大致原理是让系统先将所有app信息读出来存放在mBgAllAppsList中,然后将mBgAllAppsList中取出的AppInfo对象转换成ShortCutInfo对象,然后调用addItemToDatabase方法将所有app信息存入保存桌面workspace信息的数据库中的favourite表中,然后执行forceReload()方法重新加载所有数据即可将app全部从数据库中读出显示在workspace桌面上。 第二个问题,对于默认Hotseat的修改,只需要去res/xml路径下找到dw_phone(或者tablet)_hotseat.xml中修改resolve标签内的内容即可。
能不能具体点
lanzwu 2017-07-28
  • 打赏
  • 举报
回复
第一个问题我最近也在弄,我的解决办法比较原始,大概说一下,先找到LauncherModel类的LoderTask内部类,然后在run方法中做修改,在方法中的LoadAndBindWorkspace()方法和LoadAndBindWorkspace()方法执行后,添加如下代码和方法:

.......(run方法中)
// second step
if (DEBUG_LOADERS) Log.d(TAG, "step 2: loading all apps");
loadAndBindAllApps();

SharedPreferences sp = Launcher.msp; //在Launcher.java中添加的静态SharedPreferences
int appNum = mBgAllAppsList.size();
if(sp.getBoolean("isfirst",true)){
addScreenAndAddItem(appNum);
updateWorkspaceScreenOrder(mContext,loadWorkspaceScreensDb(mContext));
forceReload();
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean("isfirst",false);
editor.commit();
}
}
......(run方法中)

public void addScreenAndAddItem(int appNum){
int screenNum = (int)Math.ceil((double)appNum/30); //这里的30是一个workspace桌面能承载的最大app数量,我改的是平板5x6界面所以是30个,这个数量可以在一个地方获得,我还没整理好偷懒直接写了
ContentResolver cr = mContext.getContentResolver();
Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI; //获取访问数据库的uri
int startNum = 0;
for(int i =1;i<=screenNum;i++) { //这部分算法写的比较拙略,总之就是向不同屏幕id添加app信息
int addNum = appNum-30 >= 0 ? 30 : appNum+30*(i-1);
ContentValues v = new ContentValues();
v.put(LauncherSettings.WorkspaceScreens._ID, i);
v.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, i-1);
cr.insert(uri,v);
additem(addNum,startNum,i);
appNum = appNum - 30;
startNum = addNum;
}
}
public void additem(int appNum,int startNum,int screen){
int y = 0;
for(int i=startNum;i<appNum;i++){
ShortcutInfo shortcutInfo = new ShortcutInfo(mBgAllAppsList.get(i));
addItemToDatabase(mContext,shortcutInfo,-100,screen,i%6,y);
if(i%6==5) {
y++;
}
}
}

大致原理是让系统先将所有app信息读出来存放在mBgAllAppsList中,然后将mBgAllAppsList中取出的AppInfo对象转换成ShortCutInfo对象,然后调用addItemToDatabase方法将所有app信息存入保存桌面workspace信息的数据库中的favourite表中,然后执行forceReload()方法重新加载所有数据即可将app全部从数据库中读出显示在workspace桌面上。
第二个问题,对于默认Hotseat的修改,只需要去res/xml路径下找到dw_phone(或者tablet)_hotseat.xml中修改resolve标签内的内容即可。
安新小子 2016-12-13
  • 打赏
  • 举报
回复
楼主,问题解决了吗 我也遇到了这个问题,能不能分享一下解决办法
CikyG 2016-11-25
  • 打赏
  • 举报
回复
引用 2 楼 NLDRBHC 的回复:
告诉你一个工具去找。 在SDK里面有一个hierarchyviewer的工具,一般是在sdk的tools目录里面。 你用这个连接上设备,然后可以定位到代码。 如果不会操作再说
我知道这个工具,代码已经定位 ,原来修改的if判断这里没有了
CikyG 2016-11-25
  • 打赏
  • 举报
回复
引用 5 楼 markZ1986 的回复:
hotseat里面resetlayout里面判断是否显示 然后你对应的xml也要修改一下


这里没有判断了 ,直接添加进去的
markZ1986 2016-09-20
  • 打赏
  • 举报
回复
hotseat里面resetlayout里面判断是否显示 然后你对应的xml也要修改一下
Anotherdgf 2016-09-08
  • 打赏
  • 举报
回复
楼主解决这个问题了吗?最近也在搞这个问题,不知道怎么改
Anotherdgf 2016-09-08
  • 打赏
  • 举报
回复
楼主,求助!SOS
CikyG 2016-08-27
  • 打赏
  • 举报
回复
自己默默的顶上去
「已注销」 2016-08-27
  • 打赏
  • 举报
回复
告诉你一个工具去找。
在SDK里面有一个hierarchyviewer的工具,一般是在sdk的tools目录里面。
你用这个连接上设备,然后可以定位到代码。
如果不会操作再说

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧