工具栏 - 添加向上按钮

时间:2014-12-17 20:34:49

标签: android toolbar

我正在尝试使用工具栏而不是ActionBar,但我无法弄清楚如何添加向上按钮以返回上一个活动。 我找不到任何与之相关的方法。

如何添加向上按钮?

8 个答案:

答案 0 :(得分:24)

我猜你要找的是这样的:

Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar_detail);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

或者在Fragment中使用的情况下:

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">

答案 1 :(得分:7)

如果您想在XML中执行此操作,可以使用...

   String parentWindowHandler = driver.getWindowHandle(); // Store your parent window
            String subWindowHandler = null;

            Set<String> handles = driver.getWindowHandles(); // get all window handles
            Iterator<String> iterator = handles.iterator();
            while (iterator.hasNext()){
                subWindowHandler = iterator.next();
            }
            driver.switchTo().window(subWindowHandler); 

*****perform operations on child window******************

driver.switchTo().window(parentWindowHandler);

答案 2 :(得分:1)

只要您已调用getSupportActionBar().setHomeButtonEnabled(true);

,调用setSupportActionBar(toolbar);仍然可以正常工作

答案 3 :(得分:1)

如果您想知道为什么单击向上按钮不适用于片段,则还需要设置导航侦听器,不确定为什么Google默认情况下未启用它:

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

答案 4 :(得分:0)

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

您可以根据需要自定义工具栏,在toolbar.xml中,或者在布局中定义android.support.v7.widget.Toolbar的位置添加“up”按钮,如下所示:

<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>

现在,在您的活动中定义uphandler函数以收听此向上按钮:

public void uphandler(View v){
       this.finish();    // This will kill current activity, and if previous activity is still opened in background, it will come in front.
}

答案 5 :(得分:0)

如果活动的先前活动始终相同,则可以借助parentActivityName属性轻松地实现上/后按钮。可以在AndroidManifest.xml文件中提及,如下所示。假设DetailActivity是从MainActivity打开的。因此,当您使用DetailActivity时,工具栏将自动显示向左箭头。当我们单击左箭头时,将显示MainActivity

enter image description here

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

答案 6 :(得分:0)

如果您使用导航组件,那么在片段中添加按钮将是这样的:
在你的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"
        />
.
.

然后在你的片段中你会这样做
在 onViewCreated(..) 内

val navController = findNavController()
val appBarConfiguration = AppBarConfiguration(navController.graph)
viewBinding.toolbar.setupWithNavController(navController, appBarConfiguration)

如果您需要添加标题,请在 onResume 中使用它

    viewBinding.toolbar.title = "my title"

答案 7 :(得分:0)

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

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

返回,按钮点击自动返回活动

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}