关于设置 android:parentActivityName 后过渡动画的问题

首先,先简单介绍一下 android:parentActivityName 。

安卓开发文档中如此解释:Activity 逻辑父项的类名称。此处的名称必须与为相应 <activity> 元素的 android:name 属性指定的类名称一致。系统会读取该属性,以确定当用户按下操作栏中的“向上”按钮时应该启动哪一个 Activity。 系统还可以利用这些信息通过 TaskStackBuilder 合成 Activity 的返回栈。要支持 API 级别 4 - 16,您还可以使用为 "android.support.PARENT_ACTIVITY" 指定值的 <meta-data> 元素来声明父 Activity。  

简单来说就是在当前 Activity 的标题栏左上角加一个返回按钮,点击后自动返回设置的 Activity 而不是回到之前的 Task。

比如为 TestActivity 设置:

<activity android:name=".TestActivity"

    android:parentActivityName=".MainActivity"/>

则点击左上角的返回图标后将自动回到 MainActivity。

关于 android:parentActivityName 详见官方文档



然而,在设置该属性后我发现系统在 Activity 切换时的过渡动画似乎有点不对劲。

首先看图:

过渡动画

为了更好的演示切换时的过渡动画,我把 过渡动画缩放 设置为了 5X 。 

可以看到,正常的进入 Activity 应该是新 Activity 从右往左进入并逐渐覆盖当前Activity。

点击返回后应该是当前 Activity 从左往右退出,并逐渐显露出上层 Activity。

例如:图中的点击进入 设置界面 和退出 设置界面。

但是,通过在 AndroidManifest 中为 Activity 添加 android:parentActivityName 的方法来返回上层时却是上层 Activity 从右往左进入并覆盖当前 Activity,而非正常的当前 Activity 从左往右退出。

例如:图中点击进入 关于界面 后退出。

通过以上分析不难得出结论,使用 android:parentActivityName 并非是 finish 当前 Activity 后返回上层,而是新建一个上层 Activity 来覆盖当前 Activity。

查询资料得知

DisplayMessageActivity为子Activity,而MainActivity为父Activity,点击 DisplayMessageActivity的左上角返回按钮的时候,调用逻辑如下:

MainActivity.onDestroy()

MainActivity.onCreate(null)

MainActivity.onStart() 

所以系统在的过渡动画给出的是进入 Activity 的动画而非退出动画,怪不得总觉得看起来怪怪的。

我个人的解决方案是手动设置 Toolbar,并添加返回按钮:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后继承 onOptionsItemSelected ,当点击 返回 按钮时手动 finish :

if (id ==android.R.id.home) {

finish();

}

这样虽然麻烦了点,但至少动画看起来顺眼了点......

如果各位大佬还有更好的方法欢迎指教~


PS:我没有刻意去设置切换 Activity 的动画,都是用的系统默认的过渡动画,所以可能不同的 ROM 动画效果不一样(比如我截图中的 MIUI 是左右滑出滑入,我使用原生安卓测试是上下滑出滑入),但实质都是一样的。

PPS:写完才发现原来文档里用的本来就是 “启动” 而非 “返回” Activity......所以说,就因为没好好看文档折腾了这么久......

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 6,380评论 1 35
  • 内容抽屉菜单ListViewWebViewSwitchButton按钮点赞按钮进度条TabLayout图标下拉刷新...
    皇小弟阅读 30,040评论 21 573
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 550评论 0 6
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 2,806评论 0 4
  • 你依偎在我怀的时候, 是我最幸福的时候。 你是我的港湾, 你是我的空气。 生命有你守候, 因此变得富有。
    b0f996ec2d14阅读 28评论 0 0