30

我正在努力在 android 中制作自定义启动器。我已经提到了 android 的 Jellybean 启动器的代码。现在我想在这个启动器中做一些修改。

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

我已经尝试了很多方法来做到这一点,但由于默认启动器代码非常复杂,仍然没有运气找到它的方法。

Playstore中已经有一个名为SOHO的应用程序完全符合我的要求。我添加了屏幕截图以引用我想要的内容。

如果你们中的任何人有任何想法,请帮助我。

在此处输入图像描述

4

4 回答 4

2

我有你的答案。您可以在(AOSP) 中进行打包Launcher2Launcher3打包。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是您想要的自定义视图。然后在清单文件中将启动器活动类从 更改LauncherMyLauncher。就是这样。

启动器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);
于 2014-05-03T13:23:50.927 回答
1

如果我没记错的话,您只需要实现一个显示主页启动器的标准活动。在您的 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>
于 2013-06-17T10:43:58.887 回答
0

您可以简单地在默认启动器使用代码中添加视图

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);

当你想删除它时

wm.removeView(v);

你还需要许可

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
于 2013-08-23T08:57:19.680 回答
0

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

好新先
可以做你想做的事。

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

   Android-SDK/samples/android-x/Home/
   where x is the API level.

他们提供了一个示例主屏幕的源代码,它应该给你一个好的开始。有了一些毅力和咖啡,您应该能够修改Launcher2代码添加您自己的自定义页面。

现在是困难的部分
因为您的部分目标是保持现有页面不变并添加一个新页面,所以让它适用于所有类型的 android... HTC senseSamsung TouchWiz,这不是一个人的工作量。它们都有不同的主屏幕功能。保留这些功能添加新的自定义页面是一项艰巨的任务。

于 2013-09-19T21:00:36.427 回答