Tampilkan Panah Kembali pada Bilah Alat

496

Saya bermigrasi dari ActionBarke Toolbardalam aplikasi saya. Tapi saya tidak tahu cara menampilkan dan mengatur acara klik di Back Arrow on Toolbarseperti yang saya lakukan Actionbar.

masukkan deskripsi gambar di sini

Dengan ActionBar, saya menelepon mActionbar.setDisplayHomeAsUpEnabled(true). Tetapi tidak ada metode yang mirip seperti ini.

Adakah yang pernah menghadapi situasi ini dan entah bagaimana menemukan cara untuk menyelesaikannya?

Huy Duong Tu
sumber

Jawaban:

900

Jika Anda menggunakan, ActionBarActivitymaka Anda dapat memberi tahu Android untuk menggunakan Toolbaryang ActionBarseperti ini:

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);

Dan kemudian menelepon ke

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

akan bekerja. Anda juga dapat menggunakannya dalam Fragmen yang terlampir ActionBarActivitiesAnda dapat menggunakannya seperti ini:

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

Jika Anda tidak menggunakan ActionBarActivitiesatau jika Anda ingin mendapatkan panah kembali pada Toolbaryang tidak ditetapkan sebagai Anda SupportActionBarmaka Anda dapat menggunakan yang berikut:

mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back));
mActionBar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {
       //What to do on back clicked
   }
});

Jika Anda menggunakan android.support.v7.widget.Toolbar, maka Anda harus menambahkan kode berikut ke AppCompatActivity:

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
Tn. Insinyur13
sumber
12
Ikon Desain Bahan resmi Google repo github.com/google/material-design-icons/blob/master/navigation/…
MrEngineer13
70
Jika Anda menggunakan versi terbaru dari appcompat-v7 (21.0.3 atau lebih tinggi), Anda dapat menggunakan R.drawable.abc_ic_ab_back_mtrl_am_alpha untuk gambar panah mundur yang dapat digambar, yang termasuk dalam perpustakaan dukungan.
Taeho Kim
23
Harap perhatikan bahwa getResources (). GetDrawable (...) sudah usang. Anda harus menggunakan ContextCompat.getDrawable (konteks, ...) sebagai gantinya.
Quentin S.
7
Tidak berhasil, tidak dapat menemukan R.drawable.abc_ic_ab_back_mtrl_am_alphakeduanya R.drawable.ic_action_back.
Henrique de Sousa
10
untuk mendapatkan ikon "kembali" dari perpustakaan dukungan toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
Bolein95
215

Saya melihat banyak jawaban tetapi ini milik saya yang tidak disebutkan sebelumnya. Ini bekerja dari API 8+.

public class DetailActivity extends AppCompatActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    // toolbar
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    // add back arrow to toolbar
    if (getSupportActionBar() != null){
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // handle arrow click here
    if (item.getItemId() == android.R.id.home) {
        finish(); // close this activity and return to preview activity (if there is any)
    }

    return super.onOptionsItemSelected(item);
}
Vasil Valchev
sumber
3
Ini hanya berfungsi jika Anda menetapkan Toolbar sebagai ActionBar. Ini bukan untuk bilah alat mandiri.
Kuffs
20
onOptionItemSelected()Suara positif untuk ini melengkapi apa yang belum dicakup oleh MrEngineer13 dalam jawabannya.
Atul
2
Terima kasih, ini berhasil untuk saya. Tampaknya lebih baik daripada menggunakan klik pendengar, saya tidak terlalu peduli dengan bilah alat mandiri
Mike76
Bagaimana saya bisa mengubah warna panah?
Dmitry
Saya tidak perlu baris di bawah baris komentar "toolbar", berfungsi dengan baik.
Retas06
173

Ada banyak cara untuk mencapainya, inilah favorit saya:

Tata letak:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:navigationIcon="?attr/homeAsUpIndicator" />

Aktivitas:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // back button pressed
        }
    });
Igor Bubelov
sumber
13
menggunakan atribut tema jauh lebih baik daripada sebagian besar saran lain dalam pertanyaan ini
Pedro Loureiro
3
alih-alih menggunakan setNavigationOnClickListener()Anda dapat menambahkan case android.R.id.home:di dalam 'onOptionsItemSelected () `.
eugene
1
case android.R.id.hometidak bekerja untuk saya. jadi setelah mencari sebentar, jawaban Anda berhasil .. terima kasih.
deejay
Ini adalah solusi paling otentik terutama jika Anda ingin menggunakan ikon kembali default sistem android.
Nauman Aslam
menggunakan toolbar.setNavigationOnClickListener {onBackPressed ()}
filthy_wizard
74

Anda dapat menggunakan bilah alat metode setNavigationIcon. Android Doc

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});
Sam
sumber
1
Bisakah Anda menambahkan penjelasan pada jawaban Anda? Kode-saja jawaban disukai pada SO.
membunyikan
1
Harap dicatat metode setNavigationOnClickListener()telah ditambahkan di api level 21 ke atas
Ali Mehrpour
3
R.drawable.abc_ic_ab_back_mtrl_am_alpha sekarang hilang dalam dukungan 23.2.0, gunakan jawaban yang diterima sebagai gantinya.
Milan
25

Jika Anda tidak ingin membuat kebiasaan Toolbar, Anda dapat melakukannya seperti ini

public class GalleryActivity extends AppCompatActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        ...  
        getSupportActionBar().setTitle("Select Image");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

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

Padamu AndroidManifest.xml

<activity
    android:name=".GalleryActivity"
    android:theme="@style/Theme.AppCompat.Light">        
</activity>

Anda juga dapat menempatkan ini android:theme="@style/Theme.AppCompat.Light"pada <aplication>tag, untuk diterapkan ke semua kegiatan

masukkan deskripsi gambar di sini

Phan Van Linh
sumber
2
Terima kasih untukif (item.getItemId() == android.R.id.home)
Adizbek Ergashev
22
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed(); // Implemented by activity
        }
    });

Dan untuk API 21+ android:navigationIcon

<android.support.v7.widget.Toolbar
    android:navigationIcon="@drawable/back_arrow"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>
Ilya Gazman
sumber
Seharusnya jawaban yang diterima.
Anton Malyshev
17

Saya menggunakan metode ini dari Dokumentasi Pengembang Google :

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getActionBar().setDisplayHomeAsUpEnabled(true);
}

Jika Anda mendapatkan pengecualian penunjuk nol, itu bisa bergantung pada tema. Coba gunakan tema lain dalam manifes atau gunakan ini sebagai alternatif:

@Override
public void onCreate(Bundle savedInstanceState) {
  ...
  getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

Kemudian di manifes, tempat saya menyetel aktivitas induk untuk aktivitas saat ini:

<activity
        android:name="com.example.myapp.MyCurrentActivity"
        android:label="@string/title_activity_display_message"
     android:parentActivityName="com.example.myfirstapp.MainActivity" >
    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.myapp.MyMainActivity" />
</activity>

Saya harap ini akan membantu Anda!

Paolo Anghileri
sumber
1
Tautan google docs dan yang getSupportActionBar()berhasil. Terima kasih!
Rick
15

Jika Anda sedang menggunakan AppCompatActivitydan telah turun jalan tidak menggunakannya, karena Anda ingin tidak mendapatkan otomatis ActionBaryang diberikannya, karena Anda ingin memisahkan Toolbar, karena kebutuhan Material Desain dan CoordinatorLayoutatau AppBarLayout, kemudian, pertimbangkan ini:

Anda masih dapat menggunakan AppCompatActivity, Anda tidak perlu berhenti menggunakannya hanya agar Anda dapat menggunakan <android.support.v7.widget.Toolbar>dalam xml Anda. Matikan saja gaya action bar sebagai berikut:

Pertama, dapatkan gaya dari salah satu tema NoActionBar yang Anda sukai di dalam Anda styles.xml, saya gunakan Theme.AppCompat.Light.NoActionBarseperti ini:

<style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>

    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    ...
    ...
</style>

Di manifes Aplikasi Anda, pilih tema gaya anak yang baru saja Anda tentukan, seperti:

    <activity
        android:name=".activity.YourSuperCoolActivity"
        android:label="@string/super_cool"
        android:theme="@style/SuperCoolAppBarActivity">
    </activity>

Di Activity Xml Anda, jika bilah alat didefinisikan seperti ini:

...
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        />
...

Kemudian, dan ini adalah bagian penting, Anda mengatur bilah tindakan dukungan ke AppCompatActivity yang Anda perluas, sehingga bilah alat di xml Anda, menjadi bilah tindakan. Saya merasa ini adalah cara yang lebih baik, karena Anda bisa melakukan banyak hal yang memungkinkan ActionBar, seperti menu, judul aktivitas otomatis, penanganan pemilihan item, dll. Tanpa harus menambahkan penangan klik khusus, dll.

Di OverCreate aktivitas Anda, lakukan hal berikut:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_super_cool);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    setSupportActionBar(toolbar);
    //Your toolbar is now an action bar and you can use it like you always do, for example:
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} 
Dhiraj Gupta
sumber
8
MyActivity extends AppCompatActivity {

    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        toolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toolbar.setNavigationOnClickListener(arrow -> onBackPressed());
    }
Artemiy
sumber
Anda dapat menggunakan retrolambda.
Artemiy
ini adalah apa yang saya miliki dan tidak berfungsi. tidak bisa mengetahuinya.
filthy_wizard
7

Cara sederhana dan mudah untuk menampilkan tombol kembali pada toolbar

Tempel kode ini dalam metode onCreate

 if (getSupportActionBar() != null){

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

Tempelkan metode override ini di luar metode onCreate

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(item.getItemId()== android.R.id.home) {

        finish();
    }
    return super.onOptionsItemSelected(item);
}
Waheed Sabir
sumber
7

Di Kotlin akan seperti itu

private fun setupToolbar(){
    toolbar.title = getString(R.string.YOUR_TITLE)
    setSupportActionBar(toolbar)
    supportActionBar?.setDisplayHomeAsUpEnabled(true)
    supportActionBar?.setDisplayShowHomeEnabled(true)
}

// don't forget click listener for back button
override fun onSupportNavigateUp(): Boolean {
    onBackPressed()
    return true
}
gprathour
sumber
6

Anda dapat melakukannya dengan mudah.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Kredit: https://freakycoder.com/android-notes-24-how-to-add-back-button-at-toolbar-941e6577418e

Euler Tiago
sumber
5

Dalam AppCompatActivitycontohnya Anda bisa melakukannya

public class GrandStatActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grand_stat);
    }

    @Override
    public void onResume() {
        super.onResume();

        // Display custom title
        ActionBar actionBar = this.getSupportActionBar();
        actionBar.setTitle(R.string.fragment_title_grandstats);

        // Display the back arrow
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }

    // Back arrow click event to go to the parent Activity
    @Override
    public boolean onSupportNavigateUp() {
        onBackPressed();
        return true;
    }

}
Pengembang
sumber
4

Di file manifes Anda untuk aktivitas tempat Anda ingin menambahkan tombol kembali, kami akan menggunakan properti android: parentActivityName

        <activity
        android:name=".WebActivity"
        android:screenOrientation="portrait"
        android:parentActivityName=".MainActivity"
        />

PS Atribut ini diperkenalkan di API Level 16.

Sunny Kumar Aditya
sumber
3

Ini bekerja dengan sempurna

public class BackButton extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.chat_box);
        Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar);
        chatbox_toolbar.setTitle("Demo Back Button");
        chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white));
        setSupportActionBar(chatbox_toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Define Back Button Function
            }
        });
    }
}
Vikash Sharma
sumber
3

Pertama, Anda perlu menginisialisasi bilah alat:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

lalu panggil tombol kembali dari bilah tindakan:

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

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

Jika Anda ingin mendapatkan panah kembali pada Toolbar yang tidak ditetapkan sebagai SupportActionBar Anda:

(kotlin)

val resId = getResIdFromAttribute(toolbar.context, android.R.attr.homeAsUpIndicator)
toolbarFilter.navigationIcon = ContextCompat.getDrawable(toolbar.context, resId)
toolbarFilter.setNavigationOnClickListener { fragmentManager?.popBackStack() }

untuk mendapatkan res dari atribut:

@AnyRes
fun getResIdFromAttribute(context: Context, @AttrRes attr: Int): Int {
    if (attr == 0) return 0
    val typedValueAttr = TypedValue()
    context.theme.resolveAttribute(attr, typedValueAttr, true)
    return typedValueAttr.resourceId
}
John
sumber
1

Tambahkan ini ke xml aktivitas di folder tata letak:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">
    <android.support.v7.widget.Toolbar
        android:id="@+id/prod_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>

Jadikan bilah alat dapat diklik, tambahkan ini ke metode onCreate:

Toolbar toolbar = (Toolbar) findViewById(R.id.prod_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});
Yang
sumber
1

Mungkin cara yang lebih dapat diandalkan untuk mendapatkan ikon dari tema Anda (jika tidak menggunakan bilah alat sebagai bilah tindakan):

toolbar.navigationIcon = context.getDrawableFromAttribute(R.attr.homeAsUpIndicator)

Untuk mengubah atribut tema menjadi drawable, saya menggunakan fungsi ekstensi:

fun Context.getDrawableFromAttribute(attributeId: Int): Drawable {
    val typedValue = TypedValue().also { theme.resolveAttribute(attributeId, it, true) }
    return resources.getDrawable(typedValue.resourceId, theme)
}
danwilkie
sumber
0

Jika Anda menggunakan DrawerLayout dengan ActionBarDrawerToggle , maka untuk menampilkan tombol Kembali alih-alih tombol Menu (dan sebaliknya), Anda perlu menambahkan kode ini di Aktivitas Anda:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.application_name, R.string.application_name);
    mDrawerLayout.addDrawerListener(mDrawerToggle);

    mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_arrow_back_white_32dp);
    mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onBackPressed(); // Or you can perform some other action here when Back button is clicked.
        }
    });
    mDrawerToggle.syncState();
    // ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item))
        return true;

    switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        // ...
    }

    return super.onOptionsItemSelected(item);
}

public void showBackInToolbar(boolean isBack) {
    // Remove next line if you still want to be able to swipe to show drawer menu.
    mDrawerLayout.setDrawerLockMode(isBack ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : DrawerLayout.LOCK_MODE_UNLOCKED);
    mDrawerToggle.setDrawerIndicatorEnabled(!isBack);
    mDrawerToggle.syncState();
}

Jadi ketika Anda perlu menampilkan tombol Kembali daripada tombol Menu , panggil showBackInToolbar (true) , dan jika Anda membutuhkan tombol Menu , panggil showBackInToolbar (false) .

Anda dapat menghasilkan panah kembali (ic_arrow_back_white_32dp) di sini , cari arrow_back di bagian Clipart (gunakan default 32dp dengan padding 8dp). Cukup pilih warna yang Anda inginkan.

Borzh
sumber
0

Anda selalu dapat menambahkan a Relative layoutatau a Linear Layoutdi Toolbardan menempatkan tampilan Gambar untuk ikon kembali atau menutup ikon di mana saja di bilah alat sesuka Anda

Misalnya saya telah menggunakan tata letak Relatif di toolbar saya

 <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_top"
                android:layout_width="match_parent"
                android:layout_height="35dp"
                android:minHeight="?attr/actionBarSize"
                android:nextFocusDown="@id/netflixVideoGridView"
                app:layout_collapseMode="pin">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">


                    <TextView

                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Myflix"
                        android:textAllCaps="true"
                        android:textSize="19sp"
                        android:textColor="@color/red"
                        android:textStyle="bold" />


                    <ImageView
                        android:id="@+id/closeMyFlix"
                        android:layout_alignParentRight="true"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center_vertical"
                        app:srcCompat="@drawable/vector_close" />


                </RelativeLayout>

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

Dan terlihat seperti ini:

masukkan deskripsi gambar di sini

Anda dapat menambahkan listener klik pada tampilan gambar itu dari Activity atau fragmen seperti ini.

  closeMyFlix.setOnClickListener({
            Navigator.instance.showFireTV(  activity!!.supportFragmentManager)
        })
Hitesh Sahu
sumber
0

Dengan Kotlin menjadi:

Xml:

<include
android:id="@+id/tbSignToolbar "
layout="@layout/toolbar_sign_up_in"/>

Dalam Aktivitas Anda: -

setSupportActionBar(tbSignToolbar as Toolbar?)//tbSignToolbar :id of your toolbar 
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
wissem miled
sumber
0

Jika Anda menggunakan JetPack Navigation.

Berikut adalah tata letak untuk MainActivity

<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=".MainActivity">

<androidx.appcompat.widget.Toolbar
        android:id="@+id/toolBar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

</androidx.appcompat.widget.Toolbar>

<fragment
        android:id="@+id/my_nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintTop_toBottomOf="@id/toolBar"
        app:layout_constraintBottom_toTopOf="parent"
        app:navGraph="@navigation/nav_graph"/>

Setel bilah alat Anda di aktivitas Anda seperti di bawah ini di onCreate () dari kelas Activity Anda.

val navHostFragment = supportFragmentManager
        .findFragmentById(R.id.my_nav_host_fragment) as NavHostFragment? ?: return

val navController = navHostFragment.findNavController()
val toolBar = findViewById<Toolbar>(R.id.toolBar)
setSupportActionBar(toolBar) // To set toolBar as ActionBar
setupActionBarWithNavController(navController)

setupActionBarWithNavController (navController) Akan membuat tombol kembali pada toolBar jika diperlukan dan menangani fungsi backButton. Jika Anda perlu menulis fungsionalitas CustomBack, buat callBack seperti di bawah ini pada metode onCreate () fragmen Anda

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        // Handle the back button event
    }

Dari Dokumentasi: https://developer.android.com/guide/navigation/navigation-custom-back

Prakash
sumber
0

Jika Anda menggunakan androidx.appcompat.app.AppCompatActivitygunakan saja:

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

Kemudian tentukan saja dalam Manifest.xmlAktivitas induk.

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

Alih-alih jika Anda menggunakan Toolbardan Anda ingin perilaku khusus, gunakan saja:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar" 
    app:navigationIcon="?attr/homeAsUpIndicator"
    .../>

dan dalam Aktivitas Anda:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //....
    }
});
Gabriele Mariotti
sumber