Menu 菜单中单个App显示多个任务列表预览视图


android 老款手机有三个物理键,新款的部分手机都把物理键给隐藏了,直接用虚拟键代替,但这三个键的功能是一样的,分别是 back 返回键、 Home 主界面键、Menu 菜单键。点击菜单键时,页面会出现app的列表预览图,通常情况下,每个app有一个预览图,如果我们想让一个app显示两个或多个预览图,该怎么办?

比如说我们的App中有两个页面 Activity1 和 Activity2,打开顺序是从 1 跳转到 2,我们想让这两个页面都显示在任务列表预览视图中,通常的做法是通过 Intent 来设置属性,比如在 Activity1 中执行跳转的方法

    public void startActivity(){
        Intent intent = new Intent(this, Activity2.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
        intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        startActivity(intent);
    }

由于 FLAG_ACTIVITY_NEW_DOCUMENT 这个字段是系统21之后才添加的,之前使用的是 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET,它存在于 3-20,因此上面方法可以稍微优化下

    public void startActivity(){
        Intent intent = new Intent(this, Activity2.class);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
        } else {
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        }
        intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
        startActivity(intent);
    }

在 Activity2 中的返回键或关闭页面时,需要主动调用 finishAndRemoveTask() 方法,结束并移除任务列表

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == 4){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                finishAndRemoveTask();
                return false;
            }
        }
        return super.onKeyDown(keyCode, event);
    }

以上是第一种写法。还有一种方法,则是通过配置清单中,通过 taskAffinity 和Activity的启动模式来实现相同的效果,以上述为例,

        <activity android:name=".Activity2"
            android:launchMode="singleInstance"
            android:taskAffinity="com.test.cn"
            >

其实只通过 taskAffinity 来控制即可,但为了防止 Activity2 多次创建,并且可以把它放到一个单独的堆栈中,所以使用了 singleInstance 启动模式。


多栏位的视图,如果想修改应用名称和图标,可以在配置清单中修改 label 和 icon 属性

 

        <activity android:name=".Activity2"
            android:label="test"
            android:icon="@drawable/mine_grade_lable"
            android:launchMode="singleInstance"
            android:taskAffinity="com.test.cn"
            >


            
这样就可以了。
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值