Java 如何在android';果冻豆发射器

Java 如何在android';果冻豆发射器,java,android,android-4.2-jelly-bean,android-launcher,Java,Android,Android 4.2 Jelly Bean,Android Launcher,我正在用android制作定制启动器。我已经参考了android的Jellybean启动器的代码。现在我想对这个发射器做一些修改 我想要什么:我们知道默认有五个工作空间屏幕,我想在任何一个工作空间屏幕中添加自定义视图。我的xml文件应该在任何一个屏幕中膨胀 我已经尝试了很多方法,但是默认的启动程序代码非常复杂,仍然没有找到解决方法 在Playstore中已经有一个名为的应用程序正是我想要的。我已经添加了参考我想要的屏幕截图 如果你们中有人有什么想法,请帮助我 如果我没记错的话,您只需要实现一个标

我正在用android制作定制启动器。我已经参考了android的Jellybean启动器的代码。现在我想对这个发射器做一些修改

我想要什么:我们知道默认有五个工作空间屏幕,我想在任何一个工作空间屏幕中添加自定义视图。我的xml文件应该在任何一个屏幕中膨胀

我已经尝试了很多方法,但是默认的启动程序代码非常复杂,仍然没有找到解决方法

在Playstore中已经有一个名为的应用程序正是我想要的。我已经添加了参考我想要的屏幕截图

如果你们中有人有什么想法,请帮助我


如果我没记错的话,您只需要实现一个标准活动,其中显示一个主启动器。在Manifest.xml中,您只需要像这样定义它:

<activity android:name=".YourLauncher" android:label="@string/launcher_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

您只需在默认lanucher使用代码中添加视图即可

wm = (WindowManager) getSystemService("window");
params = new LayoutParams();
params.type = LayoutParams.TYPE_PHONE;
    params.format = PixelFormat.RGBA_8888;
    params.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
            | LayoutParams.FLAG_NOT_FOCUSABLE;
    params.x = 100;
    params.y = 100;
    params.height = WindowManager.LayoutParams.WRAP_CONTENT;
    params.width = WindowManager.LayoutParams.WRAP_CONTENT;
    params.gravity = Gravity.LEFT | Gravity.TOP;
wm.addView(view, params);
当您要删除它时 只是

你还需要许可

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

好消息,不太好的消息,坏消息。

首先是好消息
做你想做的事是可能的

现在不是那么好的消息。
您必须从头开始编写启动器应用程序(也称为主屏幕)。是的,这涉及到完成默认启动器所做的所有漂亮的事情(多页、拖放、删除/添加应用程序图标等)。幸运的是,这并不像听起来那么难。因为默认的启动器应用程序本身是。虽然这段代码很完整,但不容易阅读。一个更容易开始的地方是SDK

   Android-SDK/samples/android-x/Home/
   where x is the API level.
他们提供了一个示例主屏幕的源代码,这应该给您一个良好的开端。有了一些毅力和咖啡,您应该能够修改代码来添加您自己的定制页面

现在是最难的部分

因为你的一部分目标是保持现有页面不变,并添加一个新页面,使其适用于所有android版本,不是一个人的工作量。它们在主屏幕上都有不同的功能。保留这些功能并添加新的自定义页面是一项艰巨的任务。

我为您提供了答案。您可以在(AOSP)的
Launcher2
Launcher3
包中执行此操作。Jellybean正在使用
Launcher2
可能是。我个人建议您使用
Launcher3
,因为它已经为您提供了这样做的方式

启动器3: 创建一个扩展
com.android.launcher3.Launcher
类的类,并覆盖必要的方法,如:

public class MyLauncher extends Launcher {


    @Override
    protected boolean hasCustomContentToLeft() {
        return true;
    }


    @Override
    protected void addCustomContentToLeft() {
        View customView = getLayoutInflater().inflate(R.layout.custom, null);

        CustomContentCallbacks callbacks = new CustomContentCallbacks() {

            @Override
            public void onShow() {}

            @Override
            public void onScrollProgressChanged(float progress) {}

            @Override
            public void onHide() {}
        };


        addToCustomContentPage(customView, callbacks, "custom view");
    }

}
这里
R.layout.custom
是您想要的自定义视图。 然后在清单文件中,将启动器活动类从
launcher
更改为
MyLauncher
。就这样

启动器2:
Workspace.java
中创建以下方法:

public void addCustomView(View child){
   CellLayout layout = (CellLayout) getChildAt(0);
   layout.addView(child);
}
然后在
Launcher.java
中,找到以下行:

mWorkspace = (Workspace) mDragLayer.findViewById(R.id.workspace);
然后将以下代码粘贴到该行后面的某个位置:

View child = LayoutInflater.from(this).inflate(R.layout.custom, null);
mWorkspace.addCustomView(child);

我也有一个同样的问题,任何人对此有任何提示或想法吗?显然,你在这里提到的应用程序(SOHO)是一个定制的主屏幕启动器应用程序。您可以注意到,当您按下home按钮时,它会询问您是否选择native home launcher或So.Ho launcher。但除此之外,该应用程序还创建了自己的设计,通过在底部栏中链接本地android应用程序,使其感觉像本地android主屏幕&制作5个屏幕。但我不确定这些屏幕在拖动事件上是如何工作的。可以是一些画布动作。@MPM:谢谢您的回复。但不管你说什么,我已经知道了。问题是我想知道他们是如何在原生android jellybean launcher中集成此视图的。您好,您能给我解释一下如何在Launcher3中将所有应用程序添加到工作区的快捷方式吗?这里是我的问题:谢谢您的回复。但这对我没有帮助:(嗨,你能给我解释一下如何在Launcher3中添加所有应用到工作区的快捷方式吗?),我的问题是:Launcher3-这只会在左侧添加一个自定义视图吗?我如何在launcher上强制一个桌面页面,然后在左侧和右侧添加一个自定义视图?例如@sha256我可以在左侧添加新页面,但我t没有显示任何内容。向左滚动时,它是空的。我正在使用launcher3addToCustomContentPage()基本上没有收到呼叫嘿,我只是想在右侧添加一个自定义页面,是否可以使用Launcher3代码?如果可以,请告诉我怎么做。我被卡住了。@Anupriya,这通常是不可能的。但我想你可以以某种方式使它工作。但我不知道如何:(
View child = LayoutInflater.from(this).inflate(R.layout.custom, null);
mWorkspace.addCustomView(child);