Bagaimana cara menyesuaikan tombol kembali di ActionBar

188

Saya telah dapat menyesuaikan latar belakang bilah tindakan, gambar logo, dan warna teks menggunakan saran dari ini:
Android: Bagaimana mengubah Ikon "Home" ActionBar menjadi sesuatu selain ikon aplikasi?
Warna teks
ActionBar Gambar latar belakang ActionBar

Bagian terakhir yang ingin saya sesuaikan adalah gambar tombol kembali. Secara default abu-abu dan saya ingin putih. Baik mengubah warna, menentukan gambar atau hanya membuatnya transparan (dan menambahkan chevron ke gambar logo saya yang disesuaikan) akan bekerja. Bagaimana saya melakukannya?

Sunil Gowda
sumber
1
Tidak ada tombol KEMBALI pada bilah tindakan. Tombol BACK ada di bilah sistem, atau tidak ada di layar (untuk perangkat dengan tombol BACK di luar layar).
CommonsWare
1
@CommonsWare, saya tidak yakin apa yang disebut 'chevron kiri' di bilah tindakan - tapi itulah yang saya sebut sebagai tombol kembali. Saya pikir itu diharapkan untuk mengganti tombol kembali fisik pada perangkat android ke depan.
Sunil Gowda
13
Tidak dan tidak Itu adalah indikator "naik" (terlepas dari orientasi panah). Anda mengaktifkannya via setDisplayHomeAsUpEnabled()on ActionBar. Secara khusus TIDAK seharusnya hanya "kembali". Ini berarti bahwa mengetuk ikon aplikasi akan "naik" hierarki daripada kembali ke aktivitas sebelumnya (seperti halnya tombol BACK pada bilah sistem).
CommonsWare
2
"jadi bagaimana dengan perangkat baru yang tidak memiliki tombol kembali fisik, apakah mereka semua menampilkan tombol kembali 'lunak'" - mereka semua harus memiliki tombol KEMBALI di bar sistem.
CommonsWare
3
hanya ingin menambahkan dalam banyak kasus tombol UP AKAN kembali saja. Lihat "Ketika layar yang sebelumnya dilihat juga merupakan induk hierarki dari layar saat ini, menekan tombol Kembali akan memiliki hasil yang sama dengan menekan tombol Naik - ini adalah kejadian umum." Dari developer.android.com/design/patterns /navigation.html
Dori

Jawaban:

390

Indikator keterjangkauan "naik" disediakan oleh drawable yang ditentukan dalam homeAsUpIndicatoratribut tema. Untuk menimpanya dengan versi kustom Anda sendiri itu akan menjadi seperti ini:

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo">
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>
</style>

Jika Anda mendukung pra-3.0 dengan aplikasi Anda, pastikan Anda memasukkan versi tema khusus ini values-v11atau serupa.

Jake Wharton
sumber
10
bekerja untuk saya juga. Saya mendeklarasikan di dalam style yang ditetapkan sebagai ActionBarStyle saya seperti pada AOSP di github tetapi tidak berfungsi - pindah ke tema utama melakukan trik! +1
Dori
37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>tidak bekerja untuk saya, tetapi <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>berhasil. Kira itu versi hal android
Michał K
6
Apakah ada cara untuk mengatur padding atas dan bawah untuk ini menjadi 0dp?
James McCracken
3
@JamesMcCracken satu-satunya cara saya bisa melakukan ini adalah melalui tata letak khusus.
greg7gkb
4
Adakah yang membuat ini bekerja Navigation Drawer? Saya kira ActionBarDrawerTogglemengganti indikator naik dengan salah satu dari indikatornya sendiri, oleh karena itu mengaturnya pada gaya tidak berpengaruh ...
Lucas Jota
89

Jadi Anda dapat mengubahnya dengan mudah secara terprogram dengan menggunakan fungsi homeAsUpIndicator () yang ditambahkan di Android API level 18 dan yang lebih tinggi.

ActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

Jika Anda menggunakan perpustakaan dukungan

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);

sniper hitman
sumber
5
Jika Anda menggunakan laci, Anda harus menelepon drawerToggle.setDrawerIndicatorEnabled(false);sebelum mengubah indikator
Floss
2
@ Floss Terima kasih, setDrawerIndicatorEnabled (false / true); menyelesaikan masalah saya untuk menetapkan tombol beranda sebagai 'Kembali' dan (Buka Laci / Tutup Laci) secara konsisten berdasarkan persyaratan saya.
Ashraf Alshahawy
1
@Floss drawerToggle.setDrawerIndicatorEnabled (false); ini bekerja untuk saya :)
Konteks
30

Saya sudah memeriksa pertanyaannya. Inilah langkah-langkah yang saya ikuti. Kode sumber dihosting di GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

Ganti gaya aktual untuk perangkat pra-v11.

Salin dan tempel kode ikuti di file styles.xml dari folder nilai default.

<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Perhatikan bahwa orang tua dapat diubah ke tema Sherlock apa pun.

Ganti gaya aktual untuk perangkat v11 +.

Pada folder yang sama di mana nilai folder berada, buat folder baru bernama values-v11. Android akan secara otomatis mencari konten folder ini untuk perangkat dengan API atau di atasnya.

Buat file baru bernama styles.xml dan tempel kode ikuti ke dalam file:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyCustomTheme" parent="Theme.Sherlock.Light">
    <item name="android:homeAsUpIndicator">@drawable/ic_home_up</item>
    </style>
</resources>

Perhatikan bahwa nama gaya harus sama dengan file dalam folder nilai default dan alih-alih item homeAsUpIndicator, itu disebut android: homeAsUpIndicator.

Masalah item karena untuk perangkat dengan API 11 atau lebih, Sherlock Action Bar menggunakan Action Bar default yang datang dengan Android, yang kuncinya adalah android: homeAsUpIndicator. Tetapi untuk perangkat dengan API 10 atau lebih rendah, Sherlock Action Bar menggunakan ActionBar sendiri, yang indikator rumah sebagai indikator disebut "homeAsUpIndicator" sederhana.

Gunakan tema baru dalam manifes

Ganti tema untuk aplikasi / aktivitas di file AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >
jiahao
sumber
2
Dan Anda dapat mencoba @ drawable / abc_ic_ab_back_holo_light atau @ drawable / abc_ic_ab_back_holo_dark jika Anda mencari ikon holo yang sudah tersedia.
Mason Lee
25

Mengubah ikon navigasi kembali berbeda untuk ActionBar dan Toolbar.

Untuk homeAsUpIndicatoratribut Override ActionBar :

<style name="CustomThemeActionBar" parent="android:Theme.Holo">
    <item name="homeAsUpIndicator">@drawable/ic_nav_back</item>
</style>

Untuk navigationIconatribut penggantian Toolbar :

<style name="CustomThemeToolbar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="navigationIcon">@drawable/ic_nav_back</item>
</style>
duviteck
sumber
19

Saya melakukan kode di bawah ini onCreate()dan bekerja dengan saya

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_yourindicator);
Waleed A. Elgalil
sumber
5

Jika Anda menggunakan Toolbar, Anda tidak memerlukan solusi itu. Anda hanya perlu mengubah tema bilah alat

app:theme="@style/ThemeOverlay.AppCompat.Light"

app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"

Jika Anda menggunakan dark.actionBar, tombol kembali Anda akan menjadi putih jika Anda menggunakan tema actionbar terang itu akan menjadi hitam.

Oguz Ozcan
sumber
Kode Anda berfungsi untuk saya, tetapi bisakah kami mengubah warna indikator itu?
Steve Luck
2
colorControlNormal dan android: nilai textColorSecondary bertanggung jawab untuk itu, tetapi saya tidak begitu yakin apa lagi nilai-nilai ini juga berubah. Anda dapat mencoba sendiri dengan menetapkan nilai-nilai ini pada tema toolbar Anda.
Oguz Ozcan
Saya menggunakan "app: theme =" @ style / ThemeOverlay.AppCompat.Light "" untuk menampilkan navigationIcon di latar belakang putih, tetapi ini menampilkan ikon abu-abu default, saya perlu mengubahnya menjadi biru. "colorControlNormal dan android: textColorSecondary" tidak berfungsi.
Steve Luck
2
Gunakan tema khusus yang memiliki "ThemeOverlay.AppCompat.Light" sebagai induk. Ini mungkin berhasil.
Oguz Ozcan
1
Saya menemukan solusi untuk mengubah ikon nav, menggunakan name = "colorControlNormal" bukan name = "android: colorControlNormal". Tapi saya ingin mengganti yang lain dengan drawable, mungkin?
Steve Luck
2

baki ini:

getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close);

di dalam onCreate();

Abdurahman Popal
sumber
Ini bekerja tetapi bagaimana untuk kembali ke tombol kembali sebelumnya
Nadimuddin
0

Saya menggunakan gambar back.png dalam file proyek menifest.xml. tidak apa-apa bekerja dalam proyek.

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>
Kulwant Singh Bhari
sumber
0

Saya memiliki masalah yang sama dari arah ikon tombol Beranda tindakan-bar, karena gagal mengelola Ikon di ikon direktori Sumber Daya Gradle

seperti dalam direktori sumber daya Arab Gradle Anda meletakkan ikon di x-hdpi dan dalam bahasa Inggris Gradle resource nama ikon yang sama Anda masukkan ke folder kepadatan berbeda seperti xx-hdpi, sehingga di APK akan ada dua nama ikon yang sama di direktori yang berbeda, sehingga perangkat Anda akan memilih ikon tergantung kepadatan mungkin RTL atau LTR

pengguna2508815
sumber