分享

OKLLauncher.doc

 lhzstudio 2016-07-23

 

http://blog.csdn.net/AwayEagle/article/details/50223521

 

http://blog.csdn.net/wds1181977/article/details/42456441

 

http://blog.csdn.net/sdjzyuxinburen/article/details/49825449

 

 

Android-->Launcher拖拽事件详解

http://blog.csdn.net/gf771115/article/details/8152837

 

 

 

 

 

 

 

 

//Launcher初始化――LauncherApplication

public class LauncherApplication extends Application

{

}

 

 

点击桌面图标:

 

E:\8317\AC8317_新公版界面_及客户定制界面\AC8317_new\AC8317_Tuobu

\AC8317_Native_Launcher\src\com\android\launcher3\Launcher.java

 

public void onClick(View v){}

 

 

public void funcLauncherSetting()

{

       Intent intent = new Intent();

       intent.setAction("android.intent.action.MAIN");

       intent.addCategory("android.intent.category.LAUNCHER");

intent.setComponent( new ComponentName("com.android.settings", "com.android.settings.SettingMainActivity"));

//intent.setComponent( new ComponentName("com.android.settings", "com.android.settings.Settings"));

       mContext.startActivity(intent);

    }

 

 

 

dimens.xml

//修改桌面ICON大小: app_icon_size

<resources>

    <dimen name="app_icon_size">110dp</dimen><!-- 64dp -->

    <dimen name="reveal_radius">80dp</dimen><!-- 64dp -->

    <dimen name="app_icon_drawable_padding">3dp</dimen>

    <dimen name="app_icon_padding_top">4dp</dimen>

 

//修改ICON与文字之间的距离

<!-- Workspace cell size -->

    <dimen name="workspace_cell_width_land">140dp</dimen>

    <dimen name="workspace_cell_width_port">96dp</dimen>

    <dimen name="workspace_cell_height_land">160dp</dimen>

    <dimen name="workspace_cell_height_port">96dp</dimen>

   

    <dimen name="workspace_width_gap_land">10dp</dimen>

    <dimen name="workspace_width_gap_port">10dp</dimen>

    <dimen name="workspace_height_gap_land">20dp</dimen>

    <dimen name="workspace_height_gap_port">24dp</dimen>

    <dimen name="workspace_bottom_padding_land">128dp</dimen><!-- 0dp -->

    <dimen name="workspace_icon_text_size">18dp</dimen>

 

 

 

 

Workspace.java桌面

AppsCustomizePagedView.java进入主菜单

 

 

删除应用图标或卸载应用程序

onDropCompleted(View target, DragObject d, boolean isFlingToDelete,          boolean success)

 

安装APK后,AllAppsList.java

   public void addPackage(Context context, String packageName) {

        final List<ResolveInfo> matches = findActivitiesForPackage(context, packageName);

 

        if (matches.size() > 0) {

            for (ResolveInfo info : matches) {

                add(new ApplicationInfo(context.getPackageManager(), info, mIconCache, null));

            }

        }

}

 

 

Hotseat中间主菜单那个按钮:

Hotseat.java

void resetLayout()

{

    allAppsButton.setOnClickListener(new View.OnClickListener()

    {

       @Override

       public void onClick(android.view.View v)

    {

}

}

}

 

void showWorkspace(boolean animated, Runnable onCompleteRunnable)

{

}

public void showAllApps(boolean animated)

{

}

 

 

//在主桌面长按图标

//Launcher.java

public boolean onLongClick(View v)

{

}

 

 

/** The different states that Launcher can be in. */

private enum State

{

    NONE, WORKSPACE, APPS_CUSTOMIZE, APPS_CUSTOMIZE_SPRING_LOADED

};

WORKSPACE:主桌面

APPS_CUSTOMIZE:应用列表APP_LIST

APPS_CUSTOMIZE_SPRING_LOADED:在应用列表中长按应用图标

 

 

 

 

 

 

E:\work\android\凯斯达\20160511\Px4_Native_Launcher\res\layout\workspace_screen.xml

 

<com.android.launcher3.CellLayout

    xmlns:android="http://schemas./apk/res/android"

    xmlns:launcher="http://schemas./apk/res/com.android.launcher3"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingLeft="@dimen/cell_layout_left_padding"

    android:paddingRight="@dimen/cell_layout_right_padding"

    android:paddingTop="3dip"

    android:layout_marginBottom="-1dip"

    android:hapticFeedbackEnabled="false"

    launcher:cellWidth="@dimen/workspace_cell_width"//ICON的宽

    launcher:cellHeight="@dimen/workspace_cell_height"//ICON的高

    launcher:widthGap="@dimen/workspace_width_gap"//ICON之间的水平间隔

    launcher:heightGap="@dimen/workspace_height_gap"//ICON之间的垂直间隔

launcher:maxGap="@dimen/workspace_max_gap" />

 

 

 

 

 

E:\work\android\凯斯达\20160511\Px4_Native_Launcher\src\com\android\launcher3\Utilities.java

static Bitmap createIconBitmap(Drawable icon, Context context)

{

           final boolean icon_add_bg = false//added by zyc 20150120

           //ICON加背景图

            if (icon_add_bg)

{

                // draw a big box for the icon for debugging

              Drawable bgDrawable = context.getResources().getDrawable(sBgIcons[sBgIconIndex]);

              bgDrawable.setBounds(0, 0, sIconTextureWidth, sIconTextureHeight);

                if (++sBgIconIndex >= sBgIcons.length) sBgIconIndex = 0;

                bgDrawable.draw(canvas);

            }

           

 

            sOldBounds.set(icon.getBounds());

           //icon的大小

            //icon.setBounds(left+10, top+14, left+width-12, top+height-14);

            icon.setBounds(left, top, left+width, top+height);

            icon.draw(canvas);

            icon.setBounds(sOldBounds);

            canvas.setBitmap(null);

}

 

 

   <style name="KaisidaMainMenuItemTextViewStyle">

        <item name="android:layout_width">@dimen/kaisida_main_menu_title_bg_width</item>

        <item name="android:layout_height">@dimen/kaisida_main_menu_title_bg_height</item>

        <item name="android:textColor">#FFFFFFFF</item>

        <item name="android:textSize">@dimen/kaisida_main_menu_title_bg_textsize</item>

        <!-- <item name="android:background">@drawable/kaisida_main_menu_title_bg</item> -->

        <item name="android:gravity">top|center</item>

        <item name="android:singleLine">true</item>

        <item name="android:ellipsize">marquee</item>

        <item name="android:marqueeRepeatLimit">2</item>

    </style>

 

       

   <style name="KaisidaOrigMainMenuItemTextViewStyle">

        <item name="android:layout_width">wrap_content</item>

        <item name="android:layout_height">@dimen/kaisida_main_menu_title_bg_height</item>

        <item name="android:textColor">#FFFFFFFF</item>

        <item name="android:textSize">@dimen/kaisida_main_menu_title_bg_textsize</item>

        <!-- <item name="android:background">@drawable/kaisida_main_menu_title_bg</item> -->

        <item name="android:gravity">top|center</item>

        <item name="android:singleLine">true</item>

        <item name="android:ellipsize">marquee</item>

        <item name="android:paddingStart">7dip</item>

        <item name="android:paddingEnd">7dip</item>

        <item name="android:minWidth">@dimen/kaisida_main_menu_title_bg_width</item>

        <item name="android:marqueeRepeatLimit">2</item>

</style>

 

 

 

 

//修改第三方软件的ICON

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3\IconCache.java

 

    private CacheEntry cacheLocked(ComponentName componentName, ResolveInfo info,

            HashMap<Object, CharSequence> labelCache) {

        CacheEntry entry = mCache.get(componentName);

        if (entry == null) {

            entry = new CacheEntry();

 

            mCache.put(componentName, entry);

 

            ComponentName key = LauncherModel.getComponentNameFromResolveInfo(info);

            if (labelCache != null && labelCache.containsKey(key)) {

                entry.title = labelCache.get(key).toString();

            } else {

                entry.title = info.loadLabel(mPackageManager).toString();

                if (labelCache != null) {

                    labelCache.put(key, entry.title);

                }

            }

            if (entry.title == null) {

                entry.title = info.activityInfo.name;

            }

 

            BitmapDrawable bitmapDrawable = RegetBitmap(componentName);

            entry.icon = Utilities.createIconBitmap(

                 getFullResIcon(info), mContext, bitmapDrawable);

 

/*            entry.icon = Utilities.createIconBitmap(

                    getFullResIcon(info), mContext);*/

        }

        return entry;

    }

 

//修改显示图标 默认图标

    private BitmapDrawable RegetBitmap(ComponentName cn)

    {

    ComponentName cName = cn;

        String strPName  = cName.getPackageName();

        String strClsName = cName.getClassName();

        BitmapDrawable draw=null;

       

 

        //设置

        if (strPName.equals("com.android.settings")

             &&strClsName.equals("com.android.settings.Settings"))

        {

        draw = (BitmapDrawable)mContext.getResources().getDrawable(R.drawable.kaisida_main_settings);

       }

        //蓝牙

        if (strPName.equals("com.AnywheeBt")

             &&strClsName.equals("com.AnywheeBt.MainActivity"))

        {

        draw = (BitmapDrawable)mContext.getResources().getDrawable(R.drawable.kaisida_main_bt);

       }

 

        return  draw!=null?draw:null;

    }

 

 

 

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\Utilities.java

static Bitmap createIconBitmap(Drawable icon, Context context, Drawable iconbackground)

{

            final boolean icon_add_bg = false//added by zyc 20150120

            if (icon_add_bg) {

                // draw a big box for the icon for debugging

              Drawable bgDrawable = context.getResources().getDrawable(sBgIcons[sBgIconIndex]);

              bgDrawable.setBounds(0, 0, sIconTextureWidth, sIconTextureHeight);

                if (++sBgIconIndex >= sBgIcons.length) sBgIconIndex = 0;

                bgDrawable.draw(canvas);

            }

           

            if (iconbackground!=null) {

              iconbackground.setBounds(0, 0, sIconTextureWidth, sIconTextureHeight);

              iconbackground.draw(canvas);

              canvas.setBitmap(null);

              return bitmap;

           }

           

            sOldBounds.set(icon.getBounds());

            //icon.setBounds(left+10, top+14, left+width-12, top+height-14);

            icon.setBounds(left, top, left+width, top+height);

            icon.draw(canvas);

            icon.setBounds(sOldBounds);

            canvas.setBitmap(null);

 

            return bitmap;

}

 

修改桌面ICON文字大小

E:\work\android\RK_Common_UI\20160615Code\Px4_Native_Launcher\res\values\styles.xml

 

   <style name="KaisidaOrigMainMenuItemTextViewStyle">

       <item name="android:layout_width">140px</item>

       <item name="android:layout_height">@dimen/kaisida_main_menu_title_bg_height</item>

       <item name="android:textColor">#FFFFFFFF</item>

       <item name="android:textSize">@dimen/kaisida_main_menu_title_bg_textsize</item>

       <item name="android:gravity">top|center</item>

       <item name="android:singleLine">true</item>

       <item name="android:ellipsize">marquee</item>

       <item name="android:paddingStart">7dip</item>

       <item name="android:paddingEnd">7dip</item>

       <item name="android:minWidth">@dimen/kaisida_main_menu_title_bg_width</item>

       <item name="android:marqueeRepeatLimit">2</item>

    </style>

 

 

 

 

2016-6-23

 

// Workspace的继承关系:

ViewGroup - PagedView – SmoothPagedView – Workspace

 

 

 

 

private void loadAllAppsByBatch()

{
     //只有这两个标记,才需要app图标显示在所有程序列表 OWL

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);

mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

}

 

 

 

 

2016-6-27

 

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\res\layout\launcher.xml

        <com.oklcom4.launcher3.Workspace

            android:id="@+id/workspace"

            android:layout_width="match_parent"

            android:layout_height="match_parent"

            android:layout_marginBottom="20dp"

            android:paddingLeft="30dp"

            android:paddingRight="30dp"

            android:layout_marginTop="-5dp"

            launcher:cellCountX="@integer/cell_count_x"

            launcher:cellCountY="@integer/cell_count_y"

            launcher:defaultScreen="0"

            launcher:pageSpacing="@dimen/workspace_page_spacing"

            launcher:scrollIndicatorPaddingLeft="12dp"

            launcher:scrollIndicatorPaddingRight="12dp" >

 

            <include

                android:id="@+id/cell1"

                layout="@layout/workspace_screen0" />

            <include

                android:id="@+id/cell2"

                layout="@layout/workspace_screen1" />

            <!--

            <include

                android:id="@+id/cell3"

                layout="@layout/workspace_screen" />

            <include

                android:id="@+id/cell4"

                layout="@layout/workspace_screen" />

            <include

                android:id="@+id/cell5"

                layout="@layout/workspace_screen" />

              -->

</com.oklcom4.launcher3.Workspace>

        <include

            android:id="@+id/hotseat"

            android:layout_width="match_parent"

            android:layout_height="@dimen/button_bar_height"

            android:layout_gravity="bottom"

            layout="@layout/hotseat"

    android:visibility="invisible"/>

 

launcher处理主桌面布局,主桌面每一页就是一个cell,cell1cell2cell3等,就是代表第一到第三页。主桌面的最下面一排的hotset也是在这里

 

主桌面自定义的控件(如第一页的时钟天气等控件)是在这里处理:

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\res\layout\custom_appwidget_kaisida.xml

 

 

全部应用列表ALLAPP ICON图标和ICON文字的配置文件:

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\res\layout \apps_customize_application_kaisida.xml

 

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\AppsCustomizePagedView.java

public void syncAppsPageItems(int page, boolean immediate)

{

            PagedViewIcon icon;           

            icon = (PagedViewIcon) mLayoutInflater.inflate(

                        R.layout.apps_customize_application_kaisida, layout, false);

}

 

 

 

主桌面 ICON图标和ICON文字的配置文件:

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\res\layout\application_kaisida.xml

 

 android:layout_gravity="center_horizontal|top"

 android:layout_gravity="center_horizontal|center"

 android:layout_gravity="center_horizontal|bottom"

 

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\Workspace.java

    void addApplicationShortcut(ShortcutInfo info, CellLayout target, long container, int screen,

            int cellX, int cellY, boolean insertAtFirst, int intersectX, int intersectY)

{

        View view;       

        view = mLauncher.createShortcut(R.layout.application_kaisida, target,

(ShortcutInfo) info);       

}

 

 

 

2016-6-28

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\Launcher.java

@Override

    protected void onCreate(Bundle savedInstanceState)

{

        mModel.startLoader(true, mWorkspace.getCurrentPage());

}

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\LauncherModel.java

public void startLoader(boolean isLaunching, int synchronousBindPage)

{

        synchronized (mLock)

{

                if (synchronousBindPage > -1 && mAllAppsLoaded && mWorkspaceLoaded)

{

                    mLoaderTask.runBindSynchronousPage(synchronousBindPage);

                }

else

{

                    sWorkerThread.setPriority(Thread.NORM_PRIORITY);

                    sWorker.post(mLoaderTask);

                }

            }

        }

}

void runBindSynchronousPage(int synchronousBindPage)

{

            // Divide the set of loaded items into those that we are binding synchronously, and

        // everything else that is to be bound normally (asynchronously).

             bindWorkspace(synchronousBindPage);

            // XXX: For now, continue posting the binding of AllApps as there are other issues that

            //      arise from that.

        onlyBindAllApps();

}

 private void onlyBindAllApps()

{

callbacks.bindAllApplications(list);

}

 

 

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\Launcher.java
   
public void bindAllApplications(final ArrayList<ApplicationInfo> apps)

{

        Runnable setAllAppsRunnable = new Runnable()

{

            public void run()

{

                if (mAppsCustomizeContent != null)

{

                    mAppsCustomizeContent.setApps(apps);

                }               

            }

   };

E:\work\android\RK_Common_UI\Code\Px4_Native_Launcher\src\com\oklcom4\launcher3

\AppsCustomizePagedView.java

public void setApps(ArrayList<ApplicationInfo> list)

{

        mApps = list;

       

        //delete the hide apps pkg here //added by zyc 20160127

        if (mApps != null) {

        for (int i = 0; i < NeedHideAppsPkgNames.length; i++)

{

            String needHideAppPkgStr = NeedHideAppsPkgNames[i];

            for (int j = 0; j < mApps.size(); j++)

{

               ApplicationInfo info = mApps.get(j);

               if (info.componentName.getPackageName().equalsIgnoreCase(needHideAppPkgStr))

{

                   mApps.remove(info);

              }

           }

        }

    }

        //****************************************************/

       

        Collections.sort(mApps, LauncherModel.getAppNameComparator());

        updatePageCounts();

        invalidateOnDataChange();

    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多