我注意到无论我们使用哪个启动器,Dropbox快捷方式窗口小部件对指定文件夹的外观与快捷方式布局一致:
所以我想创建一个行为和看起来像快捷方式的小部件,并与用户的启动器保持一致。
是否可以获取Launcher的快捷方式布局并在我们自己的小部件中使用它?
答案 0 :(得分:5)
除AppWidgets
之外,Android还有一个Launcher快捷方式的概念,通常分组在“Widget”标签下。 Dropbox文件夹是Launcher Shortcut。
快捷方式很简单,所有数据(图标,标签,意图)都是静态的,在创建时确定。它们无法动态更新,调整大小或滚动。但它们与发射器样式匹配(并且可以放置在文件夹或扩展坞内)并且使用的资源少于AppWidget
s。
可悲的是,他们的记录很差。您可以在ApiDemos / src / com / example / android / apis / app / LauncherShortcuts.java(https://android.googlesource.com/platform/development/+/master/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.java)中找到示例,并在https://developer.android.com/reference/android/content/Intent.html#EXTRA_SHORTCUT_ICON(所有EXTRA_SHORTCUT _...项目)中对它们进行引用
您需要Activity
和AndroidManifest
intent-filter来处理创建快捷方式:
AndroidManifest.xml
<activity
android:name=".LauncherShortcutActivity" >
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
此活动将由具有startActivityForResult
的启动器调用,您可以提供一个界面(例如,让用户选择快捷方式应该指向的文件夹),但最终必须返回一个图标,标签和意图。发射器。
void setResult(CharSequence title, int iconResourceId, Intent targetIntent) {
Intent data = new Intent();
data.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, iconResourceId));
data.putExtra(Intent.EXTRA_SHORTCUT_NAME, title);
data.putExtra(Intent.EXTRA_SHORTCUT_INTENT, targetIntent);
setResult(Activity.RESULT_OK, data);
finish();
}
在这种情况下,图标被指定为我的应用程序的资源。或者,图标可以是位图(例如联系人照片):
data.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
答案 1 :(得分:1)
是否可以获取Launcher的快捷方式布局并在我们自己的小部件中使用它?
有数百个主屏幕实现。主屏幕开发人员可以随心所欲:
当然欢迎您查看各种开源主屏幕实现,并了解它们如何格式化其启动器条目。但是,没有通用的方法来确定它们是否支持快捷方式或发射器,更不用说它们如何格式化这些条目。