3

android 5.0新特性之最近应用程序

看到很多介绍android 5.0新特性,而其中的一项吸引了我。

图片描述

新闻导出都是开放了API,但是自己找起来却无从找起。这篇博文主要介绍如何自定义最近任务。

android5.0以下和5.0以上的对比

相信大多数人都有android设备,而按home键,可以查看最近任务,在5.0以下,其是不可定制的,而在5.0以上的设备,google为我们提供了相关API。

图片描述

整个item包含了应用的label和launcher图标以及截图。来看看5.0的这些属性位置吧:

图片描述

默认的配置

让我们看看在android5.0设备上发生了什么,系统会从你的manifest文件中拉取the Overview card’s icon, label and top bar

  • Icon - android:icon

  • Label text - android:label

  • Top Bar Color - colorPrimary value of android:theme

注意,这些参数都是获取你的当前activity属性,如果在manifest中,你的activity并没有相关设置,那么其会获取application的属性。

举个例子:

<application

android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity
    android:label="@string/recent_task_main"
    android:name=".MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

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

</application>

其在打开MainActivity的时候,其对应的label会是recent_task_main,而不是app_name。而需要注意的是:其对应的lable只会被第一个开启的activity覆盖,即以后的lable设置不会覆盖Overview Card的lable。lable对应的是app的名字,会展现给用户,对应的android:icon也是展现给用户的图标。如果更改,用户安装可见的图标和标题都会变动。

注意:你的manifest文件中的icon作为Overview Card中的icon是不合适的,因为作为icon,其还是偏大,所以最好的方案是设置不同的icon。

不幸的是manifest并不提供这样的能力,即你如果在activity中设置了android:icon属性,其会覆盖对应的 launcher icon,所以你不能够在xml中设置,你需要在代码中动态设置。

还有个地方需要注意:label的文字颜色是不被配置的,系统会自动为其选择颜色。比如当topbar是黑色的,那么文字就会是白色的,否则字体为黑色。

API

直接贴代码吧:

 //sdk必须大于5.0
        if (VERSION.SDK_INT < VERSION_CODES.LOLLIPOP){
            return;
        }
        Resources resources = activity.getResources();
        //获取application中的label
        String label = resources.getString(activity.getApplicationInfo().labelRes);
        //标题栏颜色必须非透明
        int colorPrimary = resources.getColor(R.color.colorPrimary);
        //因为该方法最好放在baseactivity中,所以如果不将icon设置为静态,其会每次创建
        if (sIcon == null){
            sIcon = BitmapFactory.decodeResource(resources,R.drawable.ic_gplus_blue);
        }
        activity.setTaskDescription(new TaskDescription(label,sIcon,colorPrimary));

activity提供了setTaskDescription方法,其需要TaskDescription实例,而TaskDescription提供了多个构造器,注意color传入必须是非透明。

建议:你的app肯定有BaseActivity,所以你可以在你的base中操作,同时可以新建类,将其设置为静态方法,然后再BaseActivity中调用该静态方法。


neu
3.1k 声望1.2k 粉丝