我正在研究在android中制作自定义启动器。我已经提到了android的Jellybean启动器的代码。现在我想在这个启动器中进行一些修改。
我想要的是什么:我们知道默认有五个工作区屏幕,我想在任何一个工作区屏幕中添加自定义视图。我的xml文件应该在任何一个屏幕中膨胀。
我已经尝试了很多方法,但由于默认的启动器代码非常复杂,但仍然没有找到方法。
Playstore中已经有一个名为SOHO的应用程序,正是我想要的。我添加了屏幕截图以引用我想要的内容。
如果您有任何想法,请帮助我。
先谢谢。
答案 0 :(得分:2)
我有你的答案。您可以在(AOSP)的Launcher2
和Launcher3
包中进行此操作。 Jellybean正在使用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);
答案 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 sense,Samsung TouchWiz,etc, etc不是一个人的工作量。它们都具有主屏幕的不同功能。保留这些功能 和 添加新的自定义页面是一项艰巨的任务。