Android 工具栏-添加向上按钮

Android 工具栏-添加向上按钮,android,toolbar,Android,Toolbar,我尝试使用工具栏而不是ActionBar,但我不知道如何添加up按钮以返回到上一个活动。 我找不到任何与之相关的方法 如何添加向上按钮?调用getSupportActionBar()。setHomeButtonEnabled(true)仍然可以工作我想你要找的是这样的东西: Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar_detail); setSupportActionBar(toolbar); getSupportActionBar

我尝试使用工具栏而不是ActionBar,但我不知道如何添加up按钮以返回到上一个活动。 我找不到任何与之相关的方法


如何添加向上按钮?

调用
getSupportActionBar()。setHomeButtonEnabled(true)setSupportActionBar(工具栏),代码>仍然可以工作

我想你要找的是这样的东西:

Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar_detail);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
或在片段中使用时:

Toolbar toolbar = (Toolbar) view.findViewById(R.id.app_bar_detail);
((ActionBarActivity) getActivity()).setSupportActionBar(toolbar);
((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
这将显示工具栏中的操作栏,但不要担心所有内容都会很好地结合在一起。如果你不想在你的动作栏或任何背景下留下阴影,最后你要做的就是在vaules/styles.xml中改变你的主题

<style name="AppThmeme.Base" parent="Theme.AppCompat.NoActionBar">

您可以在工具栏中添加自己的“向上”按钮,毕竟它只是一个视图组

您可以在toolbar.xml中自定义工具栏,也可以在布局中定义android.support.v7.widget.toolbar的任何位置添加“向上”按钮,如下所示:

<android.support.v7.widget.Toolbar
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/toolbar"
   android:minHeight="?attr/actionBarSize"
   android:layout_height="?attr/actionBarSize"
   android:background="@drawable/color_toolbar"
   android:layout_width="match_parent">

   <ImageButton
       android:id="@+id/upButton"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:onClick="uphandler"
       android:src="@drawable/backbutton"
       android:layout_gravity="end"/>

</android.support.v7.widget.Toolbar>

如果要在XML中执行此操作,可以使用

<android.support.v7.widget.Toolbar
            app:navigationIcon="?homeAsUpIndicator"
            ...

如果某个活动的上一个活动始终相同,则可以在
parentActivityName
属性的帮助下实现“向上/返回”按钮。它可以在
AndroidManifest.xml
文件中提到,如下所示:

<activity android:name=".DetailActivity"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>


当我们点击向左箭头时,就会显示
MainActivity

如果您想知道为什么点击向上按钮不能处理片段,您还需要设置一个导航侦听器,不确定谷歌默认情况下为什么没有启用它:

protected fun setupToolbar(toolbar: Toolbar) {
    (activity as AppCompatActivity).run {
        setSupportActionBar(toolbar)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        toolbar.setNavigationOnClickListener { onBackPressed() }
    }
}

如果您使用的是导航组件,则片段中的“添加”按钮如下所示:
在fragment.xml中

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".presentation.recipeitem.RecipeDetailsFragment">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_constraintTop_toTopOf="parent"
        android:elevation="4dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        />
.
.
如果您需要添加标题,请在onResume中使用此选项

    viewBinding.toolbar.title = "my title"

您必须自动添加这些行后退按钮显示

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
在背面,按钮自动单击返回活动

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
使用this.finish()是一种反模式,因为“up”图标应该将用户带到应用程序中的分层父级,而不一定是他们看到的最后一个屏幕:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}