【问题标题】:Avoid Translucent Activity from listening to onBackPressed避免 Translucent Activity 监听 onBackPressed
【发布时间】:2017-10-01 12:06:00
【问题描述】:

我有一个主题为@style/Theme.AppCompat.NoActionBar.Translucent 的半透明活动

由于这个Activity 是完全透明的,所以用户不知道Activity 的存在。因此,当用户按下返回按钮时,默认行为应该是无论用户上次打开哪个Activity,都应该接受返回按钮事件。

但由于 Translucent Activity 位于顶部,因此它接受了该事件,并且在用户看来,后退按钮在第一次尝试时不起作用。有什么方法可以在onBackPressed() 之后几毫秒发送一个返回键事件,或者我可以将我的Activity 设置为根本不听关键事件?有一些像 FLAG_NOT_TOUCHABLE 这样的标志告诉应用程序不想被触摸,但这对我来说在后退按钮上不起作用。

请不要建议我使用Service,因为我绝对有必要使用Activity,而且它也应该是透明的。

【问题讨论】:

  • 如果您不覆盖后按,则默认实现是调用 super.onBackPressed 方法!如果您覆盖并且什么都不做,那么用户将不会使用返回键事件离开您的活动。所以这个问题毫秒为我澄清,因为它最容易做到!还有为什么你想要一个透明的活动?有像对话活动这样的替代品吗?
  • 我忘记包含该活动是由服务调用的问题。准确地说,是一项无障碍服务。每当用户启动第三方应用程序时,辅助功能服务都会触发并加载我的半透明活动。因此,我希望我的应用程序背后的第三方应用程序能够收听后按。要么这个,要么我的应用程序应该接受事件,然后按前一个应用程序本身的后退按钮,这样用户就不会感觉到它。
  • 至于为什么我必须使用Activity:我需要使用mediaprojection API对第三方应用程序进行截图,这需要我调用startActivityForResult()然后等待结果。
  • 我怀疑您所需要的是否可行?它看起来很hacky和安全!

标签: android android-activity android-theme


【解决方案1】:

您可以使用startActivityForResult() 启动半透明活动,然后覆盖半透明活动中的onBackPressed 函数。所以你可以继续做这样的事情。

在您的 MainActivity 或调用活动中,像这样启动半透明活动。

private static final int TRANSLUCENT_ACTIVITY = 101;

Intent intent = new Intent(getActivity(), YourTranslucentActivity.class);
startActivityForResult(intent, TRANSLUCENT_ACTIVITY);

并像这样覆盖onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == RETURNED_FROM_TRANSLUCENT_ACTIVITY) {
        // Call the backPressed function in your calling Activity
        super.onBackPressed();
    }
}

现在在半透明活动中,您需要像这样覆盖onBackPressed

@Override
public void onBackPressed() {
    super.onBackPressed();
    setResult(Activity.RESULT_OK);
}

因此,诀窍不是避免后按功能,而是采用另一种方式来完全按照您的期望行事。

希望对您有所帮助。

【讨论】:

  • 我忘记包含该活动是由服务调用的问题。准确地说,是一项无障碍服务。每当用户启动第三方应用程序时,辅助功能服务都会触发并加载我的半透明活动。因此,我希望我的应用程序背后的第三方应用程序能够收听后按。要么这个,要么我的应用程序应该接受事件,然后按前一个应用程序本身的后退按钮,这样用户就不会感觉到它。
猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 1970-01-01
相关资源
最近更新 更多