【问题标题】:Starting new activity that will not support multi-window启动不支持多窗口的新活动
【发布时间】:2017-01-10 20:27:26
【问题描述】:

我的MainActivity 支持Android N 新的多窗口模式。但是,我希望我的 AwesomeActivity 不支持多窗口。

我尝试了以下方法:

AndroidManifest.xml

<activity
    android:name=".activities.MainActivity"
    android:label="@string/app_name"
    android:windowSoftInputMode="stateHidden"/>
<activity android:name=".activities.AwesomeActivity"
    android:resizeableActivity="false" />

MainActivity.java

Intent intent = new Intent(this, AwesomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
//removing CLEAR_TOP and SINGLE_TOP has no effect either
//Intent.FLAG_ACTIVITY_CLEAR_TASK in conjunction with Intent.FLAG_ACTIVITY_NEW_TASK does not have an effect either

我认为通过添加Intent.FLAG_ACTIVITY_NEW_TASK(有或没有Intent.FLAG_ACTIVITY_CLEAR_TASK),这意味着AwesomeActivity 将是它自己的任务堆栈中的根活动,因此,我应该无法获得多-AwesomeActivity的窗口模式。

但是,这不起作用,我仍然可以从AwesomeActivity 切换到多窗口模式,这不是所需的行为。

虽然Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK 的组合似乎可以启动 AwesomeActivity,但从某种意义上说,如果您在 AwesomeActivity 中将应用程序置于后台,然后将 AwesomeActivity 带回前台,您将无法返回到 MainActivity,因为它已从任务堆栈中擦除。我相信在大多数情况下,用户希望能够返回到MainActivity,所以这个解决方案是不够的。

【问题讨论】:

  • 你的targetSdkVersion 是什么?如果您删除 CLEAR_TOPSINGLE_TOP(AFAIK,您在这里不需要)会有什么变化吗?
  • 我删除了CLEAR_TOPFLAG_ACTIVITY_SINGLE 仍然无法正常工作。
  • @CommonsWare TargetSdkVersion 为 24
  • 尝试先进入多窗口模式,MainActivity 向上。然后,开始AwesomeActivity。设备是否退出多窗口模式?
  • @CommonsWare 不,当我进入 AwesomeActivity 时,设备不会退出多窗口模式:(

标签: android android-studio multi-window android-7.0-nougat


【解决方案1】:

添加并尝试,我还没有验证 android:resizeableActivity="false"

请查看此链接以获取帮助https://developer.android.com/guide/topics/ui/multi-window.html#overview

【讨论】:

  • 他已经为他的活动设置了android:resizeableActivity="false",正如您在问题中看到的那样。
  • 这个标签是申请的,他是申请活动的。 Kaleb 您是否尝试将其应用于应用程序标签,即
  • 是的,但我不想为整个应用禁用多窗口。
【解决方案2】:

FLAG_ACTIVITY_NEW_TASK 似乎不够用。同时使用FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_MULTIPLE_TASK 有效:

      startActivity(new Intent(MainActivity.this, ActivityTwo.class)
        .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_MULTIPLE_TASK));

【讨论】:

  • 如果您这样做,请尝试在 ActivityTwo 中将应用程序置于后台,然后将其返回到前台,然后按软后退按钮。该应用程序将关闭,因为 MainActivity 已从任务堆栈中擦除。这不是我们想要的行为。
  • @Kaleb:嗯,BACK 只会带你回到任务中。您可以使用android:taskAffinity 使其他任务可见(在这种情况下,您不需要FLAG_ACTIVITY_MULTIPLE_TASK),但是当您销毁任务时,在不可调整大小的任务中返回默认仍会将您转回到主屏幕根。您必须在onBackPressed()AwesomeActivity 中做一些花哨的恶作剧才能将用户引导到其他地方。或者,使两个活动都不可调整大小,或使两个活动都可调整大小。我不知道这里有其他选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-11
  • 2014-08-12
相关资源
最近更新 更多