Hiển thị mũi tên quay lại trên Thanh công cụ


496

Tôi đang di chuyển từ ActionBarđến Toolbartrong ứng dụng của mình. Nhưng tôi không biết cách hiển thị và đặt sự kiện nhấp vào Mũi tên lùi Toolbarnhư tôi đã làm Actionbar.

nhập mô tả hình ảnh ở đây

Với ActionBar, tôi gọi mActionbar.setDisplayHomeAsUpEnabled(true). Nhưng không có phương pháp tương tự như thế này.

Có ai từng đối mặt với tình huống này và bằng cách nào đó tìm ra cách giải quyết nó?



Sử dụng ví dụ getSupportActionBar () tại đây freakyjolly.com/how-to-add-back-arrow-in-android-activity
Code Spy

Câu trả lời:


900

Nếu bạn đang sử dụng một ActionBarActivitythì bạn có thể nói với Android để sử dụng Toolbarnhư là ActionBarnhư vậy:

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

Và sau đó gọi đến

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

sẽ làm việc. Bạn cũng có thể sử dụng nó trong Fragment được đính kèm với ActionBarActivitiesbạn có thể sử dụng nó như thế này:

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

Nếu bạn không sử dụng ActionBarActivitieshoặc nếu bạn muốn lấy mũi tên lùi trên một Toolbarcái không được đặt là của bạn SupportActionBarthì bạn có thể sử dụng như sau:

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
   }
});

Nếu bạn đang sử dụng android.support.v7.widget.Toolbar, thì bạn nên thêm đoạn mã sau vào AppCompatActivity:

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

12
Biểu tượng thiết kế vật liệu chính thức của Googles repo github.com/google/m
design

70
Nếu bạn đang sử dụng phiên bản mới nhất của appcompat-v7 (21.0.3 trở lên), bạn có thể sử dụng R.drawable.abc_ic_ab_back_mtrl_am_alpha cho mũi tên lùi có thể rút được, có trong thư viện hỗ trợ.
Taeho Kim

23
Xin lưu ý rằng getResource (). GetDrawable (...) không được dùng nữa. Thay vào đó, bạn nên sử dụng ContextCompat.getDrawable (bối cảnh, ...).
Quentin S.

7
Không làm việc, không thể tìm thấy R.drawable.abc_ic_ab_back_mtrl_am_alphacả R.drawable.ic_action_back.
Henrique de Sousa

10
để lấy biểu tượng "quay lại" từ thư viện hỗ trợ toolbar.setNavigationIcon(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_material);
Bolein95

215

Tôi thấy rất nhiều câu trả lời nhưng đây là của tôi mà không được đề cập trước đây. Nó hoạt động từ 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);
}

3
Điều này chỉ hoạt động nếu bạn đặt Thanh công cụ là ActionBar. Nó không dành cho các thanh công cụ độc lập.
Kuffs

20
Upvote cho onOptionItemSelected()Điều này hoàn thành những gì MrEngineer13 không đề cập trong câu trả lời của anh ấy.
Atul

2
Cảm ơn điều này đã làm việc cho tôi. Có vẻ tốt hơn so với sử dụng trình nghe nhấp chuột, tôi không thực sự quan tâm đến các thanh công cụ độc lập
Mike76

Làm thế nào tôi có thể thay đổi màu sắc của mũi tên?
Dmitry

Tôi không cần các dòng dưới dòng bình luận "thanh công cụ", hoạt động tốt.
Hack06

173

Có nhiều cách để đạt được điều đó, đây là mục yêu thích của tôi:

Bố trí:

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

Hoạt động:

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

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // back button pressed
        }
    });

13
sử dụng thuộc tính chủ đề tốt hơn nhiều so với hầu hết các đề xuất khác trong câu hỏi này
Pedro Loureiro

3
thay vì sử dụng, setNavigationOnClickListener()bạn có thể thêm case android.R.id.home:vào bên trong 'onOptionsItemSelected () `.
eugene

1
case android.R.id.homeđã không làm việc cho tôi. Vì vậy, sau khi tìm kiếm một lúc, câu trả lời của bạn đã thực hiện mẹo .. cảm ơn.
deejay

Đây là giải pháp xác thực nhất đặc biệt nếu bạn muốn sử dụng biểu tượng trở lại mặc định của hệ thống Android.
Nauman Aslam

sử dụng thanh công cụ.setNavlationOnClickListener {onBackPression ()}
filthy_wizard

74

bạn có thể sử dụng phương thức thanh công cụ setNavlationIcon. Tài liệu Android

mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

mToolBar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleOnBackPress();
    }
});

1
Bạn có thể vui lòng thêm một số lời giải thích cho câu trả lời của bạn? Các câu trả lời chỉ có mã được tán thành trên SO.
bấm còi

1
Xin lưu ý phương pháp setNavigationOnClickListener()đã được thêm vào ở cấp độ api 21 trở lên
Ali Mehrpour

3
R.drawable.abc_ic_ab_back_mtrl_am_alpha hiện đã có trong hỗ trợ 23.2.0, thay vào đó hãy sử dụng câu trả lời được chấp nhận.
Milan

25

Nếu bạn không muốn tạo một tùy chỉnh Toolbar, bạn có thể làm như thế này

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);
    }
}                     

Ở bạn AndroidManifest.xml

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

bạn cũng có thể đặt thẻ này android:theme="@style/Theme.AppCompat.Light"để <aplication>gắn thẻ, để áp dụng cho tất cả các hoạt động

nhập mô tả hình ảnh ở đây


2
Cảm ơn vìif (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
        }
    });

Và cho API 21+ android:navigationIcon

<android.support.v7.widget.Toolbar
    android:navigationIcon="@drawable/back_arrow"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"/>

Nên là câu trả lời được chấp nhận.
Anton Malyshev

17

Tôi đã sử dụng phương pháp này từ Tài liệu dành cho nhà phát triển của Google :

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

Nếu bạn nhận được một ngoại lệ con trỏ null, nó có thể phụ thuộc vào chủ đề. Hãy thử sử dụng một chủ đề khác trong tệp kê khai hoặc sử dụng thay thế này:

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

Sau đó, trong tệp kê khai, nơi tôi đặt hoạt động cha cho hoạt động hiện tại:

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

Tôi hy vọng điều này sẽ giúp bạn!


1
Các liên kết tài liệu google và getSupportActionBar()làm việc. Cảm ơn!
Rick

15

Nếu bạn đang sử dụng AppCompatActivityvà đã đi vào con đường không sử dụng nó, vì bạn muốn không nhận được tự động ActionBarmà nó cung cấp, vì bạn muốn tách ra Toolbar, vì nhu cầu Thiết kế Vật liệu của bạn và CoordinatorLayouthoặcAppBarLayout , sau đó, hãy xem xét điều này:

Bạn vẫn có thể sử dụng AppCompatActivity, bạn không cần ngừng sử dụng nó để bạn có thể sử dụng a <android.support.v7.widget.Toolbar>trong xml của mình. Chỉ cần tắt kiểu thanh hành động như sau:

Đầu tiên, lấy một phong cách từ một trong những chủ đề NoActionBar mà bạn thích trong đó styles.xml, tôi đã sử dụng Theme.AppCompat.Light.NoActionBarnhư vậy:

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

Trong bảng kê khai ứng dụng của bạn, chọn chủ đề kiểu con bạn vừa xác định, như vậy:

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

Trong Activity Xml của bạn, nếu thanh công cụ được xác định như vậy:

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

Sau đó, và đây là phần quan trọng, bạn đặt thanh Hành động hỗ trợ thành AppCompatActivity mà bạn đang mở rộng, để thanh công cụ trong xml của bạn trở thành thanh hành động. Tôi cảm thấy rằng đây là một cách tốt hơn, bởi vì bạn có thể đơn giản thực hiện nhiều việc mà ActionBar cho phép, như menu, tiêu đề hoạt động tự động, xử lý lựa chọn vật phẩm, v.v. mà không cần dùng đến trình xử lý nhấp chuột tùy chỉnh, v.v.

Trong phần ghi đè onCreate của Activity, hãy làm như sau:

@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);
} 

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());
    }

Bạn có thể sử dụng retrolambda.
Artemiy

đây là những gì tôi có và nó không hoạt động. Không thể tìm ra nó.
filthy_wizard

7

Cách đơn giản và dễ dàng để hiển thị nút quay lại trên thanh công cụ

Dán mã này vào phương thức onCreate

 if (getSupportActionBar() != null){

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

Dán phương thức ghi đè này bên ngoài phương thức onCreate

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

        finish();
    }
    return super.onOptionsItemSelected(item);
}

7

Trong Kotlin nó sẽ là

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
}


5

Trong AppCompatActivityví dụ bạn có thể làm

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

}

4

Trong tệp kê khai của bạn cho hoạt động mà bạn muốn thêm nút quay lại, chúng tôi sẽ sử dụng thuộc tính android: ParentActivityName

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

PS Thuộc tính này được giới thiệu trong API Cấp 16.


3

Điều này làm việc hoàn hảo

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
            }
        });
    }
}

3

Trước tiên, bạn cần khởi tạo thanh công cụ:

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

sau đó gọi nút quay lại từ thanh hành động:

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

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

2

Nếu bạn muốn lấy mũi tên lùi trên Thanh công cụ không được đặt làm SupportActionBar:

(kotlin)

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

để lấy độ phân giải từ các thuộc tính:

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

1

Thêm phần này vào xml của hoạt động trong thư mục bố cục:

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

Làm cho thanh công cụ có thể nhấp, thêm chúng vào phương thức 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();
    }
});

1

Có thể là một cách đáng tin cậy hơn để lấy biểu tượng lên từ chủ đề của bạn (nếu không sử dụng thanh công cụ làm thanh hành động của bạn):

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

Để biến thuộc tính theme thành drawable, tôi đã sử dụng hàm mở rộng:

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

0

Nếu bạn đang sử dụng DrawerLayout với ActionBarDrawerToggle , sau đó để hiển thị lại nút thay vì menu nút (và ngược lại), bạn cần phải thêm mã này trong hoạt động của bạn:

@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();
}

Vì vậy, khi bạn cần hiển thị nút Quay lại thay vì nút Menu , hãy gọi showBackInToolbar (đúng) và nếu bạn cần nút Menu , hãy gọi showBackInToolbar (sai) .

Bạn có thể tạo mũi tên quay lại (ic_arrow_back_white_32dp) tại đây , tìm kiếm mũi tên_back trong phần Clipart (sử dụng 32dp mặc định với phần đệm 8dp). Chỉ cần chọn màu bạn muốn.


0

Bạn luôn có thể thêm một Relative layouthoặc một Linear Layouttrong Toolbarvà đặt chế độ xem Hình ảnh cho biểu tượng quay lại hoặc biểu tượng đóng ở bất cứ đâu trên thanh công cụ tùy thích

Ví dụ: tôi đã sử dụng Bố cục tương đối trong thanh công cụ của mình

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

Và nó trông như thế này:

nhập mô tả hình ảnh ở đây

Bạn có thể thêm trình nghe nhấp chuột vào chế độ xem hình ảnh đó từ Hoạt động hoặc đoạn như thế này.

  closeMyFlix.setOnClickListener({
            Navigator.instance.showFireTV(  activity!!.supportFragmentManager)
        })

0

Với Kotlin, nó đã trở thành:

Xml:

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

Trong hoạt động của bạn: -

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

0

Nếu bạn đang sử dụng Điều hướng JetPack.

Đây là cách bố trí cho 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"/>

Thiết lập thanh công cụ của bạn trong hoạt động của bạn như dưới đây trong onCreate () của lớp Activity của bạn.

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)

setupActionBarWithNavControll (navContoder) Sẽ tạo nút quay lại trên toolBar nếu cần và xử lý chức năng backButton. Nếu bạn cần viết chức năng CustomBack, hãy tạo một cuộc gọi lại như bên dưới trên phương thức onCreate () của bạn

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

Từ Tài liệu: https://developer.android.com/guide/navlation/navlation-custom-back


0

Nếu bạn đang sử dụng androidx.appcompat.app.AppCompatActivitychỉ sử dụng:

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

Sau đó, chỉ cần xác định trong Manifest.xmlHoạt động cha.

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

Thay vào đó, nếu bạn đang sử dụng Toolbarvà bạn muốn có một hành vi tùy chỉnh, chỉ cần sử dụng:

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

và trong Hoạt động của bạn:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //....
    }
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.