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ặconOptionsItemSelected(android.R.id.home). - Dùng
onBackPressedDispatcher(Activity 1.2+) thay choonBackPressed()deprecated. - Nếu dùng
NavController(Navigation Component), Up button tự động xử lý bởiNavigationUI.setupActionBarWithNavController().