android7.0/7.1新特性小结

多窗口

在android7.0中原生提供了多窗口模式和画中画模式,多窗口模式将屏幕分为上下或左右两块区域分别显示两个应用,画中画模式主要应用在android TV中,类似于windows中的多窗口。

分屏

实现分屏功能只需要在AndroidManifest.xml中为application或特定的activity添加以下属性即可

android:resizeableActivity="true"

这样就可以在横屏或竖屏的情况下让应用分屏显示,效果图如下

  • 竖屏显示效果
  • 横屏显示效果

画中画

和分屏实现方式相同,只是需要设备支持,目前只是在android TV中有此功能,手机并没有开启该功能,需要进行特殊设置。实现方法也是在AndroidManifest.xml中为application或特定的activity添加以下属性

android:supportsPictureInPicture="true"

效果图如下

Shortcut

android7.1中加入的shortcut类似于iOS的3D touch,只是将iPhone上的重按替换成了长按,长按后会弹出菜单,提供快捷操作,shortcut分为静态配置和动态配置。

静态配置

静态配置一般用于固定的选项,需要在资源文件重定义。在res下建立xml目录并新建shortcuts.xml文件,这里面定义shortcut的显示内容和跳转intent,代码如下

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <shortcut
        android:shortcutId="static_1"
        android:enabled="true"
        android:icon="@mipmap/ic_launcher"
        android:shortcutShortLabel="@string/static_shortcut_short_name_1"
        android:shortcutLongLabel="@string/static_shortcut_long_name_1" >
        <intent
            android:action="android.intent.action.VIEW"
            android:targetPackage="com.test.newfeaturedemo"
            android:targetClass="MainActivity" />
        <categories android:name="android.shortcut.conversation" />
    </shortcut>
</shortcuts>

这里有几个主要属性用来设置菜单内容

  • id: shortcut的id,必须惟一,否则后面的会覆盖前面的
  • longLabel: 显示在弹出菜单中的label
  • shortLabel: 通过拖拽显示在桌面上的label
  • icon: 一个选项对应的icon
  • intent: 跳转intent,必须设置,否则会抛出java.lang.NullPointerException: Shortcut Intent must be provided的异常

之后还要在AndroidManifest中的activity中添加meta-data标签,代码如下

<activity android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <meta-data
        android:name="android.app.shortcuts"
        android:resource="@xml/shortcuts"/>
</activity>

这样就可以通过资源文件的配置生成shortcut。需要注意的是,shortcut的数量并不能无限增加,当数量超过4时就会抛出如下异常

java.lang.IllegalArgumentException: Max number of dynamic shortcuts exceeded

动态生成

动态生成shortcut由ShortcutInfo构成,ShortcutInfo有几个主要属性与静态配置相同,下面就通过ShortcutManager动态的生成两个shortcut

private void initShortcut() {
        ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);

        ShortcutInfo shortcutInfo = new ShortcutInfo.Builder(this, "1")
                .setShortLabel("dynamic short 1")
                .setLongLabel("dynamic long 1")
                .setDisabledMessage("disable")
                .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
                .setIntent(new Intent(Intent.ACTION_VIEW, Uri.EMPTY, this, MainActivity.class))
                .build();

        ShortcutInfo shortcutInfo1 = new ShortcutInfo.Builder(this, "2")
                .setShortLabel("dynamic short 1")
                .setLongLabel("dynamic long 2")
                .setIcon(Icon.createWithResource(this, R.mipmap.ic_launcher))
                .setIntent(new Intent(Intent.ACTION_VIEW, Uri.EMPTY, this, SecondActivity.class))
                .build();

        List<ShortcutInfo> shortcutInfoList = new ArrayList<>();
        shortcutInfoList.add(shortcutInfo);
        shortcutInfoList.add(shortcutInfo1);

        shortcutManager.addDynamicShortcuts(shortcutInfoList);
    }

实现的效果图如下

2016-12-20 19_55_31.gif

此外还可以通过ShortcutManager中的updateShortcuts()和removeDynamicShortcuts()方法动态的更新和删除shortcut。

通过以上两种方法就可以在android7.1中加入快捷菜单,可以让用户在不进入应用时直接进入某个页面,实现类似iPhone中3D touch的效果。使用时也需要注意,添加数量的上限,将重要的快捷入口添加进来。还要注意体验问题,在Google的启动器中并不能标识出哪些应用有shortcut,尤其在二级菜单中如果没有就会变成长按创建快捷方式,体验很不好,在没有解决手势冲突之前,还是一把双刃剑。

Quick Settings Tile

在android7.0中Google在下拉菜单中加入了自定义快捷菜单的功能,用户可以在快捷菜单中添加快捷键。

QuickSettingTile是由服务实现的,需要实现一个集成自TileService的服务,这里提供了几个主要的生命周期

  • onTileAdded: 用户将tile添加到快速设置面板上
  • onTileRemoved: 从快速设置面板上移除tile
  • onStartListening: 快速设置菜单展开,只有添加到菜单里才会回调
  • onStopListening: 快速设置菜单收起,只有添加到菜单里才会回调
  • onClick: 点击tile的事件

实现一个QuickSettingTile的代码如下

public class QuickSettingsTileService extends TileService {

    @Override
    public void onTileAdded() {
        super.onTileAdded();
        Toast.makeText(this, "添加到快速设置菜单中", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onTileRemoved() {
        super.onTileRemoved();
        Toast.makeText(this, "从快速设置菜单中移除", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStartListening() {
        super.onStartListening();
        Toast.makeText(this, "下拉快速设置菜单", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStopListening() {
        super.onStopListening();
        Toast.makeText(this, "收起快速设置菜单", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onClick() {
        super.onClick();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
    }
}

既然是一个服务,就需要在AndroidManifest中注册这个服务,代码如下

<service android:name=".QuickSettingsTileService"
    android:label="QuickSettingTile"
    android:icon="@mipmap/ic_launcher"
    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
    <intent-filter>
        <action android:name="android.service.quicksettings.action.QS_TILE" />
    </intent-filter>
</service>

之后就可以将自定义的tile添加到下拉设置菜单中了,效果如下

2016-12-20 19_56_20.gif

小结

以上就是android7.x中新加的UI上的功能,分屏可以让用户在同一个屏幕上开启两个应用,在大屏手机上有明显优势。shortcut快捷入口可以让用户在不启动应用的时候直接进入某个页面,提升使用效率。QuickSettingTile可以让用户在快速设置使用应用入口,应用可以根据需求添加不同入口,提升用户体验。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,612评论 4 59
  • 不知不觉新年又到了,一样的街道一样的各种小店和一样的店主,仿佛这一切都没有变过,唯一变得可能是时间吧。小孩子们玩着...
    S杉杉阅读 247评论 0 1
  • 现在这条时间线上,除去2016年9月1号这个日期上的我,随便抓一个我出来问,都是没有wifi活不下去的我。 然而如...
    poro_poro阅读 572评论 0 0