我有一个活动,它有一个显示后退按钮的工具栏。
<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>
到目前为止一切正常,但使用工具栏中的后退按钮时转换动画错误。
当我打开活动时,它会从右侧滑入。
当我按下手机的物理后退按钮时,它会再次向右滑动。这是正确的。
然而,当使用工具栏后退按钮时,它会向左滑动。这看起来不错。我该怎么改变它,所以它复制了物理后退按钮的行为?
答案 0 :(得分:4)
当您按下操作栏按钮时,AppCompatActivity
会在onMenuItemSelected()
来电中按此按钮检测此按钮,并调用onSupportNavigateUp()
。这种方法决定了父母的活动&#34; Intent
并使用它向上导航。因为它使用Intent
来(重新)打开上一个活动,所以它使用与打开&#34; new&#34;相同的动画。屏幕。
假设你并不关心&#34;向上导航&#34;的特殊细节。模式(这听起来像你没有,因为评论让我相信你没有横向导航,你不能从第一次活动以外的任何地方进入你的第二次活动),你可以支持 - 所有这些内置的&#34; up&#34;通过覆盖onSupportNavigateUp()
方法的行为。
@Override
public boolean onSupportNavigateUp() {
finish();
return true;
}
这意味着按下动作栏向上按钮始终只是finish()
你的活动,所以(就像我之前说过的那样)你会失去所有智能内置&#34; up&#34;行为......但你还是不想要那样。
你也可以在onOptionsItemSelected()
中处理动作栏向上按钮,但我更喜欢另一种方式,因为我认为你劫持系统的行为更加明显
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
使用其中任何一个,您可以删除&#34;父母&#34;您的清单中的定义,因为现在它们没有被使用。
答案 1 :(得分:0)
尝试一下:
override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}