zoukankan      html  css  js  c++  java
  • Android launcher icon size

    第一部分: 首先找到设置home screen上icon大小的位置。只可能有两个地方,一个是xml中指定,一个是在代码中指定。无论在哪里指定,都会在make icon的过程中引用,那么我先找到make icon的地方。在createShortcut@Launcher.java中,有如下一句 info.icon = Utilities.createIconThumbnail(info.icon, this); 可以看到icon就是从这里创建的。那么接着找createIconThumbnail这个具体创建icon的方法。 在 createIconThumbnail@Utilities.java中 final Resources resources = context.getResources(); sIconWidth = sIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size); 这应该就是从xml中读取icon高和宽的语句,找到这个xml修改。在launcher的xml文件夹中的dimens.xml中找不到app_icon_size这个字段。接着找整个android系统的xml文件夹,在dimens.xml中找到<dimen name="app_icon_size">48dip</dimen>,这个应该就是的了。修改之,重新编译之,ok。

     ==============

    第二部分: 安装第一部分的操作,模拟器运行,发现问题,icon并没有变大。仔细看createIconThumbnail方法,发现读取到的app_icon_size仅仅做确定icon的最大的高和宽的作用,也就是说app_icon_size限定每个icon的最高和最宽的大小,并不是直接指定icon的高和宽。 同时,launcher中是划分为每个格子cell的大小的,这个大小也对icon的布局有影响。因为如果icon大小超过了cell的大小显然是不允许的。cell的大小在这里来修改 Android_srcpackagesappsLauncher eslayout-landworkspace_screen.xml Android_srcpackagesappsLauncher eslayout-portworkspace_screen.xml 一个是横屏布局,一个竖屏布局。launcher:cellWidth这个字段是宽,launcher:cellHeight是高。

    ==============

     第三部分: 在laucher的源代码中,对laucher上的icon是这么判断的,如果实现app的icon大于icon_size的值,则对其进行缩小。如果app的icon小于icon_size的值,则按照icon的原大小画上去。所以我们如果要enlarge launcher上的icon size,就必须add code to enlarge the icon size。 Android_srcpackagesappsLaunchersrccomandroidlauncherUtilities.java createIconThumbnail function.

     /*customed icon. * author: Welly Liu * date: 12.16.2010 */

     final float ratio ;

     if(iconWidth < iconHeight) {

         ratio = (float)height/iconHeight;

        width = (int)(ratio*iconWidth);

      } else {

         ratio = (float)width/iconWidth; height = (int)(ratio*iconHeight);

      }

     final int x = (sIconWidth - width) / 2;

     final int y = (sIconHeight - height) / 2;

     icon.setBounds(x, y, x + width, y + height);

    =================

     第四部分: 经过以上三个部分的操作,测试发现有两个问题。 1. 抽屉当中的app icon也变大了,这个不是我所希望的。 2. laucher screen中的上下文菜单中的folders菜单中的子菜单有问题,分别为All contacts,Bluetooth Received,Starred contacts,Contacts with phone numbers 这四个菜单点击后,会在screen上出现live folder的icon,这个icon没有变大。

     =================

     第五部分: 解决第一个问题,让抽屉当中的app icon不受影响。 找到app icon的由来。app 在抽屉中的显示,是一个gridview,由文件AllAppsGridView.java实现,每一个item由ApplicationsAdapter.java中定制的atapter来提高item,当然包括view。找到ApplicationsAdapter钟对getView的定义,发现了 info.icon = Utilities.createGridIconThumbnail(info.icon, getContext()); 那么把这个地方的icon不受以前的改变就可以了。

     ================

     第六部分 解决第二个问题,如何让这些folder的icon也变大? 经过研究laucher的代码发现launcher中其他菜单产生的app icon都是laucher中经过自己的代码createIconThumbnail 这个方法产生的,所以在这里可以改变icon。但是live folder产生的icon不是从这里产生的,而是从原生的app 应用程序当中得到。 那么就有了一个投机取巧的方法,将原生的app应用程序中的icon大小改为我们理想的大小就ok了。分别是contact 应用程序,它对应三个icon,还有Bluetooth 应用程序,对应一个

    修改页面Tag的东西。

    在Launcher.xml内添加LinearLayout.第一次Launcher内setupViews的时候用AddView将给定的资源添加进去。以后在workspace内在切屏函数computeScroll内调用Launcher内的替换函数    public void refreshTopTag(int currentScreen,int screenCount){
            for(int i = 0; i<screenCount; i++){
                resetTopTagLayout(i,currentScreen,screenCount);
            }
        }
        public void resetTopTagLayout(int pageindex,int currentScreen,int screenCount){
           
            if(pageindex != currentScreen){
                Drawable dotCurrentScreen =  getResources().getDrawable(dotId);
                ImageView mTemp = (ImageView) mTopTagLayout.getChildAt(pageindex);
                mTemp.setImageDrawable(dotCurrentScreen);
            }
            else{
               
                Drawable dotCurrentScreen =  getResources().getDrawable(screenDots[currentScreen]);
                ImageView mTemp = (ImageView) mTopTagLayout.getChildAt(currentScreen);
                mTemp.setImageDrawable(dotCurrentScreen);
            }
            mTopTagLayout.invalidate();

    Android 总结 2: 动态添加screen底端菜单内快捷键,要求与screen内的applications 不冲突,也就是说,桌面上有的底端菜单内不能有,反之亦然。 做法,更改loadFavorites,解析default_workspace.xml,获取标签为container的内容,也就是包名,与显示位置(负数)。使用Java.util.map的HashMap保存结果,每个包名对应一个坐标位置,更改loadFavorites的返回值类型HashMap,使用load调用,并与screen内的application比较。分开显示

  • 相关阅读:
    cv2.matchTemplate图片匹配
    pytorch 安装坑
    滑动轨迹函数记录
    selenium chrome开发者
    tp5 json()与json_encode()
    where 查询
    tp5.1 Class not found
    978. Longest Turbulent Subarray
    1004. Max Consecutive Ones III
    424. Longest Repeating Character Replacement
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744653.html
Copyright © 2011-2022 走看看