如何在android Jelly Bean Launcher中添加自定义视图

时间:2013-06-17 05:51:28

标签: java android android-4.2-jelly-bean android-launcher

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

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

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

Playstore中已经有一个名为SOHO的应用程序,正是我想要的。我添加了屏幕截图以引用我想要的内容。

如果您有任何想法,请帮助我。

先谢谢。

enter image description here

4 个答案:

答案 0 :(得分:2)

我有你的答案。您可以在(AOSP)的Launcher2Launcher3包中进行此操作。 Jellybean正在使用Launcher2。我个人建议你和Launcher3一起使用,这样就可以了。

<强> Launcher3:

创建一个扩展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。就是这样。

<强> 的launcher2:

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

答案 1 :(得分: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>

答案 2 :(得分: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" />

答案 3 :(得分:0)

好消息,不是好消息,坏消息。

好新的第一次
你可以做你想做的事。

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

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

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

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