我正在用Android制作自定义启动器。我已经引用了Android的Jellybean启动器的代码。现在我想在此启动器中进行一些修改。
我想要的东西:我们知道默认有五个工作区屏幕,我想在任何一个工作区屏幕中添加自定义视图。我的xml文件应在任一屏幕中放大。
我已经尝试了许多方法来完成此操作,但是由于默认的启动器代码非常复杂,仍然没有运气来寻找解决方法。
[Playstore中已经有一个名为SOHO的应用程序可以完全满足我的要求。我已经添加了屏幕截图以引用我想要的内容。
[如果您有任何想法请帮助我。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS83YkJOWi5wbmcifQ==” alt =“在此处输入图像描述”>
我有你的答案。您可以从(AOSP)的Launcher2
和Launcher3
包中进行操作。豆形软糖正在使用Launcher2
。我个人建议您选择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
。就是这样。
在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);
如果我没记错的话,您只需要执行一个显示家庭启动器的标准活动。在您的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);
当您要删除它时只是
wm.removeView(v);
您还需要许可
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
[好消息,不是好消息,是坏消息。 好新第一。可以做您想做的。
现在不是那么好消息。您将必须从头开始编写启动器应用程序(也称为主屏幕)。是的,这涉及到执行默认启动器所做的所有那些精美的事情(多页,拖放,删除/添加应用程序图标等)。幸运的是,它并不像听起来那样困难。因为默认的启动器应用程序本身是opensource。尽管此代码完整,但不容易阅读。更容易开始的地方是SDK
Android-SDK/samples/android-x/Home/
where x is the API level.
他们提供了示例主屏幕的源代码,它应该为您提供一个良好的开端。有了毅力和咖啡,您应该可以修改Launcher2代码to添加自己的自定义页面。
现在是最难的部分。因为您的目标之一是使现有页面保持不变并添加新页面,所以要使其适用于所有版本的android ... HTC sense,Samsung TouchWiz,etc,etc不是单人工作量。它们在主屏幕上都有不同的功能。保留这些功能和添加新的自定义页面是一项艰巨的任务。