官方 Twitter的 Android应用程序的不断推出新 的Android的UI功能和行为模式 ,如仪表板,搜索栏,QuickAction和行动吧。 一个有趣的模式是 QuickActions 显示在上下文行动 列表视图 。 这种模式实际上已经存在于 QuickContact 对话框/默认酒吧 跟 应用程序(因为机器人2.0)。
该 QuickActions 对话框不包含在标准的 Android SDK的 ,所以我们必须手动创建它。 起初,我并没有从理念上如何建立,所以我决定下载并阅读源代码的程序跟 机器人的Git 。 我发现 QuickContact 对话框使用私有API调用( com.android.internal.policy.PolicyManager )不存在标准的SDK。 谷歌后,张贴和有关团体质疑它在 堆栈溢出 ,我得到了 它的解决方案 从 Qberticus (感谢名单Qberticus!)。
Qberticus的QuickActions使用简单/普通的布局,所以我必须创建一个自定义布局,因此将QuickContact样子跟应用程序或QuickActions Twitter的应用程序。 源代码基于QuickContact,我做了一个BetterPopupWindow类轻微变质对Qberticus的和扩展它来实现自定义布局。 我也使它可定制的,所以图标和列表文本动作都可以定制。
以下是QuickActions演示的screenshoots:
QuickContact / Twitter的QuickActions
代码段创建行动清单
<font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; "><font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; ">最后ActionItem图表=新ActionItem(); chart.setTitle(“图表”); chart.setIcon(getResources()getDrawable(R.drawable.chart)。); chart.setOnClickListener(新OnClickListener(){@ Override ^ 1错误的onClick (视图v){Toast.makeText(TestQuickAction.this,“图选择”,Toast.LENGTH_SHORT)显示();。}});最后ActionItem生产=新ActionItem(); production.setTitle(“产品”);生产。setIcon(getResources()getDrawable(R.drawable.production)。); production.setOnClickListener(新OnClickListener(){@ Override ^ 1错误的onClick(视图v){Toast.makeText(TestQuickAction.this,“产品选择”,烤面包。LENGTH_SHORT)显示();。}}); </font></font>
第01行:创建新的行动线路03:设定的动作游戏行03:设置操作图标线路04:点击设置监听器
对话框显示QuickAction
<font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; "><font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; ">按钮btn1 =(按钮)this.findViewById(R.id.btn1); btn1.setOnClickListener(新View.OnClickListener(){@ Override ^ 1错误的onClick(视图v){QuickAction质量保证=新QuickAction(五); qa.addActionItem (图表); qa.addActionItem(生产); qa.setAnimStyle(QuickAction.ANIM_AUTO); qa.show();}}); </font></font>
线路05:创建新QuickAction对话行07-08:添加操作项09行:设置动画风格011线:显示QuickAction
下载完整的源代码
Gallery3D_like QuickActions
下载完整的源代码
随着QuickActions选择的动作
<font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; "><font style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; " mce_style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; font-size: 100%; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; outline-width: 0px; outline-style: initial; outline-color: initial; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; display: inline; background-position: initial initial; background-repeat: initial initial; ">addAction.setOnClickListener(新OnClickListener(){@ Override ^ 1错误的onClick(视图v){Toast.makeText(NewQA.this,“添加”+文字,Toast.LENGTH_SHORT)显示();。mQuickAction.dismiss();}} ); </font></font>
下载完整的源代码