如何在android的JellyBean Launcher中添加自定义视图

问题描述 投票:30回答:4

我正在用Android制作自定义启动器。我已经引用了Android的Jellybean启动器的代码。现在我想在此启动器中进行一些修改。

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

我已经尝试了许多方法来完成此操作,但是由于默认的启动器代码非常复杂,仍然没有运气来寻找解决方法。

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

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS83YkJOWi5wbmcifQ==” alt =“在此处输入图像描述”>

java android android-4.2-jelly-bean android-launcher
4个回答
2
投票

我有你的答案。您可以从(AOSP)的Launcher2Launcher3包中进行操作。豆形软糖正在使用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
投票

如果我没记错的话,您只需要执行一个显示家庭启动器的标准活动。在您的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>

0
投票

您可以简单地在默认的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);

当您要删除它时只是

wm.removeView(v);

您还需要许可

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

0
投票

[好消息,不是好消息,是坏消息。 好新第一。可以做您想做的。

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

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

他们提供了示例主屏幕的源代码,它应该为您提供一个良好的开端。有了毅力和咖啡,您应该可以修改Launcher2代码to添加自己的自定义页面。

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

© www.soinside.com 2019 - 2024. All rights reserved.