Android工具栏上的动画后退按钮

Android工具栏上的动画后退按钮,android,android-animation,android-toolbar,Android,Android Animation,Android Toolbar,我有一个活动,它有一个工具栏,显示一个后退按钮 <android.support.v7.widget.Toolbar android:id="@+id/toolbar_about" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" and

我有一个活动,它有一个工具栏,显示一个后退按钮

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar_about"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:theme="?attr/actionBarTheme"
        app:title="@string/app_name"
        />
我把我的主要活动称为:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_about);
setSupportActionBar(toolbar);
//noinspection ConstantConditions
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
活动的父级在清单中定义

<activity android:name=".AboutActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".EntryActivity" />
</activity>

到目前为止,一切正常,除了使用工具栏中的“后退”按钮时过渡动画错误

当我打开活动时,它会从右侧滑入

当我按下手机的物理后退按钮时,它会再次向右滑动。这是正确的


但是,当使用工具栏上的“后退”按钮时,它会滑出到左侧。这看起来不对。如何更改此设置,使其复制物理后退按钮的行为?

当您按下Actionbar Up按钮时,
AppCompatActivity
在其
onMenuItemSelected()
调用中检测此按钮按下,并调用
onSupportNavigateUp()
。此方法确定“父活动”的意图,并使用该意图向上导航。因为它使用
Intent
来(重新)打开以前的活动,所以它使用与打开“新”屏幕相同的动画

假设您不关心“向上导航”模式的具体细节(听起来您不关心,因为评论让我相信您没有横向导航,除了第一个活动之外,您无法从任何地方进入第二个活动),您可以避开所有内置的“向上”通过重写
onSupportNavigateUp()
方法的行为

@Override
public boolean onSupportNavigateUp() {
    finish();
    return true;
}
这意味着按下Actionbar Up按钮总是简单地
finish()
es你的活动,所以(就像我之前说的)你失去了所有智能内置的“Up”行为。。。但你也不想那样

您也可以在
onoptionItemSelected()
中处理Actionbar Up按钮,但我更喜欢另一种方式,因为我认为您劫持系统的Up行为更为明显

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        finish();
        return true;
    }

    return super.onOptionsItemSelected(item);
}
有了这两个选项中的任何一个,您都可以从清单中删除“父”定义,因为现在它们没有被使用。

尝试以下方法:

override-fun-onSupportNavigateUp():布尔值{
onBackPressed()
返回真值

}

您确实需要在清单中定义父活动吗?我的意思是,您是否支持横向导航与分层导航,或者您是否能够从
EntryActivity
以外的任何位置打开
关于触觉
。我只有这两个活动,所以是的,活动只能从另一个呼叫。谢谢您的详细回复。我没有想到onOptionsItemSelected()甚至会有关联,但这会让我感到惊讶,因为工具栏也应该处理菜单。但是你是对的onSupportNavigateUp()覆盖对于我的用例来说已经完全足够了。再次感谢。