Toolbar - add the up button

一个人想着一个人 提交于 2019-12-04 22:44:29

I guess what you are looking for is something like this:

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

Or in case of using in Fragment:

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

This will show up your Action Bar inside of your toolbar, but don't worry everything will fit together well. The last you have to do if you dont want any shadow under your action bar or any background of it is change your theme in vaules/styles.xml.

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

If you want to do this in XML, you can use...

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

If you're wondering why clicking on up button doesn't work with fragments, you need to set up a navigation listener as well, not sure why Google hasn't enabled it by default:

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

Calling getSupportActionBar().setHomeButtonEnabled(true); should still work I think, as long as you have already called setSupportActionBar(toolbar);

You can add your own 'up' button in toolbar, after all it is just a ViewGroup.

You can customize toolbar as much as you want, in your toolbar.xml, or wherever you have defined android.support.v7.widget.Toolbar in your layout add your 'up' button like given below :

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

Now, define uphandler function in your activity to listen to this up button :

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

In case when previous activity is always same for an activity then up/back button can be easily achieved with the help of parentActivityName attribute. It can be mentioned in AndroidManifest.xml file as shown below. Let's say DetailActivity was opened from MainActivity. So when you're on DetailActivity then tool bar will automatically show a left pointing arrow. When we click on left pointing arrow then MainActivity gets displayed.

<activity android:name=".DetailActivity"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!