Android7.0新推出了一个非常实用的功能——添加快速设定(或者翻译成快速设置),但是感觉社区里关注的人比较少,可能目前为止国内还没有Android7.0的手机,但是越早接触越好,甚至可以告诉产品经理7.0以上可以实现此功能,从而让公司的产品更加与时俱进。

“快速设置”通常用于直接从通知栏显示关键设置和操作,非常简单。在Android 7.0以后任何应用都可以在下拉菜单中添加自己的快速设定,从而让程序更加灵活方便。

对于用户来讲:

Google工程师为额外的“快速设置”图块添加了更多空间,用户可以通过向左或向右滑动跨分页的显示区域访问它们。 我们还让用户可以控制显示哪些“快速设置”图块以及显示的位置 — 用户可以通过拖放图块来添加或移动图块。

对于开发者,Android 7.0 还添加了一个新的 API,从而让您可以定义自己的“快速设置”图块,使用户可以轻松访问您应用中的关键控件和操作。

添加快速设定实现方式

我们重点来看看如何实现快速设定。

首先需要创建一个类继承 TileService,这是一个特殊的服务,这个TileService是7.0 SDK新加的,所以务必SDK更新到7.0,这个服务不需要程序开启,系统默认能够识别,并调用,所以在低版本上运行这个程序也不会有问题。

可以实现几个生命周期相关的函数,也可以选择实现

public class QuickSettingService extends TileService{
//当用户从Edit栏添加到快速设定中调用
@Override
public void onTileAdded() {
Log.d(LOG_TAG, "onTileAdded");
}
//当用户从快速设定栏中移除的时候调用
@Override
public void onTileRemoved() {
Log.d(LOG_TAG, "onTileRemoved");
}
// 点击的时候
@Override
public void onClick() {
Log.d(LOG_TAG, "onClick");
}
// 打开下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
//在TleAdded之后会调用一次
@Override
public void onStartListening () {
Log.d(LOG_TAG, "onStartListening");
}
// 关闭下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
// 在onTileRemoved移除之前也会调用移除
@Override
public void onStopListening () {
Log.d(LOG_TAG, "onStopListening");
} }

因为这个类本身就是服务, 需要配置在清单文件AndroidManifest.xml中

<application
...>
...
<service android:name=".QuickSettingService"
android:label="快速设定"
android:icon="@drawable/ic_videocam"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
<intent-filter>
<action android:name="android.service.quicksettings.action.QS_TILE"/>
</intent-filter>
</service>
</application>

从上面的声明中,其实已经比较明显,这个Tile要显示的名字,icon等都是在这里声明的,系统UI直接就可以查询到,特别注意这里一定要加上对应的permission才行。

接下来运行程序,就可以在下拉菜单的编辑栏中看到我们的图标,可以拖拽到上面的一栏就会在快速设定中



有了显示,还需要有具体功能,这时候一般都通过设置按钮实现了。

直接上完整代码了:

//继承TileService
public class QuickSettingService extends TileService{
private final int STATE_OFF = 0;
private final int STATE_ON = 1;
private final String LOG_TAG = "QuickSettingService";
private int toggleState = STATE_ON;
//当用户从Edit栏添加到快速设定中调用
@Override
public void onTileAdded() {
Log.d(LOG_TAG, "onTileAdded");
}
//当用户从快速设定栏中移除的时候调用
@Override
public void onTileRemoved() {
Log.d(LOG_TAG, "onTileRemoved");
}
// 点击的时候
@Override
public void onClick() {
Log.d(LOG_TAG, "onClick state = " + Integer.toString(getQsTile().getState()));
Icon icon;
if (toggleState == STATE_ON) {
toggleState = STATE_OFF;
icon = Icon.createWithResource(getApplicationContext(), R.drawable.ic_videocam_off);
getQsTile().setState(Tile.STATE_INACTIVE);// 更改成非活跃状态
} else {
toggleState = STATE_ON;
icon = Icon.createWithResource(getApplicationContext(), R.drawable.ic_videocam);
getQsTile().setState(Tile.STATE_ACTIVE);//更改成活跃状态
} getQsTile().setIcon(icon);//设置图标
getQsTile().updateTile();//更新Tile
}
// 打开下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
//在TleAdded之后会调用一次
@Override
public void onStartListening () {
Log.d(LOG_TAG, "onStartListening");
}
// 关闭下拉菜单的时候调用,当快速设置按钮并没有在编辑栏拖到设置栏中不会调用
// 在onTileRemoved移除之前也会调用移除
@Override
public void onStopListening () {
Log.d(LOG_TAG, "onStopListening");
} }

通过getQsTile() 可以设置State和Icon,State有两种状态——STATE_ACTIVE和STATE_INACTIVE, 无论你传的什么颜色的Icon,STATE_ACTIVE都会把Icon渲染成白色, STATE_INACTIVE都会把Icon渲染成灰色。

效果展示:

更多精彩请关注微信公众账号likeDev

最新文章

  1. SqlServer数据类型
  2. ubuntu16.04部署RED5流媒体服务器
  3. Visual Studio 2010安装教程
  4. Save a bricked Samsung Note 3 and do extraction
  5. Android 基于Netty的消息推送方案之概念和工作原理(二)
  6. javascirpt IP验证
  7. addEventlistener监听的事件完成一次后自动取消与jquery的one方法比较;animate动画制作,arguments.callee的用法
  8. C# split字符串 依据1个或多个空格
  9. net Mvc模块化开发
  10. 用python+selenium导入excel文件
  11. The Windows account sa does not exist and cannot be provisioned as a SQL Server system administrator
  12. [爬虫]Fiddler证书错误
  13. [PHP]实体类基类和序列化__sleep问题
  14. pow()函数结果强制转化为int造成误差的分析
  15. mongodb mac
  16. because there was insufficient free space available after evicting expired cache entries
  17. 缓存Memcached 与 Redis 相同点差异点分析
  18. Linux内核分析作业 NO.1
  19. FunGuild 数据库简介
  20. PHP代码审计笔记--命令执行漏洞

热门文章

  1. 字符串匹配算法之kmp算法
  2. bzoj月赛1805
  3. 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)
  4. Lvs 环境搭建 vbox搭建centos6.9 vbox设置 centos上安装nginx
  5. 20190921-雅礼Day1
  6. CodeChef--Cards, bags and coins
  7. springmvc配置不拦截静态资源
  8. 洛谷 P3742 umi的函数【构造】
  9. Leetcode71. Simplify Path简化路径
  10. 导出excel表