Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách bật nút Back (Up Button) trên Action Bar Android

Giới thiệu

Bài viết hướng dẫn cách hiển thị nút mũi tên Back (Up button) trên Action Bar bằng setDisplayHomeAsUpEnabled(true). Nút này dùng để.navigate về màn hình cha (parent activity) hoặc đóng Activity hiện tại.

Các bước thực hiện

Bước 1: Tạo project mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Up button enabled"
        android:textSize="18sp" />

</LinearLayout>

Bước 3: Code (MainActivity.kt)

package com.example.upbutton

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 1. Set title
        supportActionBar?.title = "Home"
        supportActionBar?.subtitle = "Detail Screen"

        // 2. Bật Up button (mũi tên back)
        supportActionBar?.setDisplayHomeAsUpEnabled(true)
        supportActionBar?.setHomeButtonEnabled(true)

        tvStatus.text = "Up button (mũi tên back) đã bật"
    }

    // 3. Xử lý click Up button
    override fun onSupportNavigateUp(): Boolean {
        // Quay về activity cha (theo manifest parentActivityName) hoặc finish()
        onBackPressedDispatcher.onBackPressed()
        return true
    }

    // Cách cũ (vẫn hoạt động)
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        if (item.itemId == android.R.id.home) {
            onBackPressedDispatcher.onBackPressed()
            return true
        }
        return super.onOptionsItemSelected(item)
    }
}

Cấu hình Parent Activity trong Manifest (Tự động navigate)

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

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

Khi có parentActivityName, onSupportNavigateUp() sẽ tự động navigate về MainActivity.

Cách hiện đại: Toolbar + OnBackPressedDispatcher

<!-- Layout -->
<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    app:navigationIcon="@drawable/ic_arrow_back" />
// Activity
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)

// Xử lý back với OnBackPressedDispatcher (API 33+)
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // ...
    onBackPressedDispatcher.addCallback(this) {
        // Xử lý back press tùy chỉnh
        finish()
    }
}

Lưu ý

  • setDisplayHomeAsUpEnabled(true) chỉ hiển thị mũi tên, không tự xử lý navigation.
  • Phải override onSupportNavigateUp() hoặc onOptionsItemSelected(android.R.id.home).
  • Dùng onBackPressedDispatcher (Activity 1.2+) thay cho onBackPressed() deprecated.
  • Nếu dùng NavController (Navigation Component), Up button tự động xử lý bởi NavigationUI.setupActionBarWithNavController().