วิธีปรับแต่งปุ่มย้อนกลับบน ActionBar


188

ฉันสามารถปรับแต่งพื้นหลังของแถบแอ็คชั่นภาพโลโก้และสีข้อความโดยใช้คำแนะนำจากสิ่งเหล่านี้:
Android: วิธีการเปลี่ยนไอคอน "หน้าแรก" ของ ActionBar ให้เป็นอย่างอื่นที่ไม่ใช่ไอคอนแอพ
สีข้อความของ
ActionBar รูปภาพพื้นหลังของ ActionBar

ชิ้นสุดท้ายที่ฉันต้องการปรับแต่งคือภาพปุ่มย้อนกลับ เป็นสีเทาตามค่าเริ่มต้นและฉันต้องการให้เป็นสีขาว ไม่ว่าจะเป็นการเปลี่ยนสีการระบุ drawable หรือเพียงแค่ทำให้มันโปร่งใส ฉันจะทำอย่างไรเกี่ยวกับเรื่องนั้น?


1
ไม่มีปุ่ม BACK บนแถบการกระทำ ปุ่ม BACK อยู่บนแถบระบบหรือไม่ได้อยู่บนหน้าจอ (สำหรับอุปกรณ์ที่มีปุ่ม BACK นอกจอ)
CommonsWare

1
@CommonsWare ฉันไม่แน่ใจว่ามีการเรียกว่า 'บั้งซ้าย' ในแถบแอ็คชันอย่างไร - แต่นั่นคือสิ่งที่ฉันหมายถึงว่าเป็นปุ่มย้อนกลับ ฉันคิดว่ามันคาดว่าจะแทนที่ปุ่มย้อนกลับทางกายภาพบนอุปกรณ์ Android ไปข้างหน้า
Sunil Gowda

13
ไม่และไม่ นั่นคือตัวบ่งชี้ "up" (แม้จะวางแนวลูกศร) คุณเปิดใช้งานผ่านทางบนsetDisplayHomeAsUpEnabled() ActionBarมันเป็นเฉพาะไม่ควรจะเพียงแค่ไป "ย้อนกลับ" หมายความว่าการแตะที่ไอคอนแอพจะเป็นการเพิ่มลำดับชั้นแทนที่จะเป็นกลับไปที่กิจกรรมก่อนหน้า (เช่นเดียวกับปุ่ม BACK บนแถบระบบ)
CommonsWare

2
"ดังนั้นสิ่งที่เกี่ยวกับอุปกรณ์ใหม่ที่ไม่มีปุ่มย้อนกลับทางกายภาพพวกเขาทั้งหมดแสดงปุ่มย้อนกลับ 'อ่อน'" - พวกเขาทั้งหมดควรมีปุ่มย้อนกลับในแถบระบบ
CommonsWare

3
เพียงต้องการเพิ่มในหลายกรณีปุ่ม UP จะกลับไป โปรดดูที่ "เมื่อหน้าจอที่ดูก่อนหน้านี้ยังเป็นพาเรนต์ลำดับชั้นของหน้าจอปัจจุบันการกดปุ่มย้อนกลับจะมีผลลัพธ์เช่นเดียวกับการกดปุ่มขึ้น - นี่เป็นเหตุการณ์ที่เกิดขึ้นทั่วไป" จากdeveloper.android.com/design/patterns /navigation.html
Dori

คำตอบ:


390

ตัวบ่งชี้การจ่าย "up" ถูกจัดเตรียมโดย drawable ที่ระบุในhomeAsUpIndicatorแอ็ตทริบิวต์ของธีม หากต้องการแทนที่ด้วยรุ่นที่คุณกำหนดเองมันจะเป็นแบบนี้:

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

หากคุณสนับสนุน pre-3.0 ด้วยแอปพลิเคชันของคุณให้แน่ใจว่าคุณใส่ธีมที่กำหนดเองในเวอร์ชันนี้values-v11หรือคล้ายกัน


10
ทำงานให้ฉันด้วย ฉันประกาศในชุดรูปแบบเป็น ActionBarStyle ของฉันเหมือนใน AOSP บน github แต่มันใช้งานไม่ได้ +1
Dori

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>ไม่ได้ผลสำหรับฉัน แต่<item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>ทำเช่นนั้น คิดว่ามันเป็นเวอร์ชั่น Android
Michał K

6
มีวิธีใดในการตั้งค่าการรองด้านบนและด้านล่างสำหรับสิ่งนี้เป็น 0dp?
James McCracken

3
@ JamesMcCracken วิธีเดียวที่ฉันสามารถทำได้คือผ่านรูปแบบที่กำหนดเอง
greg7gkb

4
มีใครทำผลงานนี้ด้วยNavigation Drawerหรือ ฉันเดาว่าActionBarDrawerToggleจะแทนที่ตัวบ่งชี้ขึ้นด้วยหนึ่งในตัวของมันเองดังนั้นการตั้งค่าตามสไตล์จึงไม่มีผลกระทบ ...
Lucas Jota

89

ดังนั้นคุณสามารถเปลี่ยนโปรแกรมได้อย่างง่ายดายโดยใช้ homeAsUpIndicator () ฟังก์ชั่นที่เพิ่มเข้ามาใน Android API ระดับ 18 ขึ้นไป

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

หากคุณใช้ห้องสมุดสนับสนุน

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


5
หากคุณใช้ลิ้นชักคุณต้องโทรdrawerToggle.setDrawerIndicatorEnabled(false);ก่อนเปลี่ยนตัวบ่งชี้
Floss

2
@Floss ขอบคุณ setDrawerIndicatorEnabled (false / true); แก้ไขปัญหาของฉันให้ตั้งค่าปุ่มโฮมให้สอดคล้องกันเป็น 'ย้อนกลับ' และ (เปิดลิ้นชัก / ปิดลิ้นชัก) ตามความต้องการของฉัน
Ashraf Alshahawy

1
@Floss drawerToggle.setDrawerIndicatorEnabled (false); มันใช้งานได้สำหรับฉัน :)
บริบท

30

ฉันตรวจสอบคำถามแล้ว นี่คือขั้นตอนที่ฉันทำตาม ซอร์สโค้ดโฮสต์บน GitHub: https://github.com/jiahaoliuliu/sherlockActionBarLab

แทนที่สไตล์จริงสำหรับอุปกรณ์ pre-v11

คัดลอกและวางรหัสติดตามในไฟล์ styles.xml ของโฟลเดอร์ค่าเริ่มต้น

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

โปรดทราบว่าผู้ปกครองสามารถเปลี่ยนเป็นธีม Sherlock ได้

แทนที่สไตล์จริงสำหรับอุปกรณ์ v11 +

บนโฟลเดอร์เดียวกันกับที่ค่าโฟลเดอร์สร้างโฟลเดอร์ใหม่ที่ชื่อว่า values-v11 Android จะค้นหาเนื้อหาของโฟลเดอร์นี้โดยอัตโนมัติสำหรับอุปกรณ์ที่มี API หรือสูงกว่า

สร้างไฟล์ใหม่ชื่อ styles.xml และวางโค้ดติดตามลงในไฟล์:

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

หมายเหตุ tha ชื่อของสไตล์จะต้องเหมือนกับไฟล์ในโฟลเดอร์ค่าเริ่มต้นและแทนที่จะเป็นรายการ homeAsUpIndicator รายการจะเรียกว่า android: homeAsUpIndicator

ปัญหารายการเป็นเพราะสำหรับอุปกรณ์ที่มี API 11 ขึ้นไป Sherlock Action Bar จะใช้ Action Bar เริ่มต้นซึ่งมาพร้อมกับ Android ซึ่งชื่อคีย์คือ android: homeAsUpIndicator แต่สำหรับอุปกรณ์ที่มี API 10 หรือต่ำกว่านั้น Sherlock Action Bar จะใช้ ActionBar ของตัวเองซึ่งตัวบ่งชี้สถานะ up up นั้นเรียกว่า "homeAsUpIndicator" อย่างง่าย

ใช้ชุดรูปแบบใหม่ในไฟล์ Manifest

แทนที่ธีมสำหรับแอ็พพลิเคชัน / กิจกรรมในไฟล์ AndroidManifest:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/MyCustomTheme" >

2
และคุณสามารถลอง @ drawable / abc_ic_ab_back_holo_light หรือ @ drawable / abc_ic_ab_back_holo_dark หากคุณกำลังมองหาไอคอน holo ที่มีอยู่แล้ว
Mason Lee

25

การเปลี่ยนไอคอนการนำทางด้านหลังแตกต่างกันสำหรับ ActionBar และ Toolbar

สำหรับhomeAsUpIndicatorแอตทริบิวต์การแทนที่ ActionBar :

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

สำหรับnavigationIconคุณลักษณะการแทนที่ของ Toolbar :

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


5

หากคุณใช้งาน Toolbar คุณไม่จำเป็นต้องแก้ปัญหาเหล่านั้น คุณต้องเปลี่ยนชุดรูปแบบของแถบเครื่องมือ

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

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

ถ้าคุณใช้ dark.actionBar ปุ่มย้อนกลับของคุณจะเป็นสีขาวหากคุณใช้ชุดรูปแบบแถบแอ็คชั่นแบบเบามันจะเป็นสีดำ


รหัสของคุณใช้ได้กับฉัน แต่เราสามารถเปลี่ยนสีของตัวบ่งชี้นั้นได้หรือไม่
Steve Luck

2
colorControlNormal และ android: ค่า textColorSecondary เป็นผู้รับผิดชอบ แต่ฉันไม่แน่ใจว่าค่าเหล่านี้จะเปลี่ยนไปอย่างไร คุณสามารถลองด้วยตัวคุณเองโดยกำหนดค่าเหล่านี้ในธีมแถบเครื่องมือของคุณ
Oguz Ozcan

ฉันใช้ "app: theme =" @ style / ThemeOverlay.AppCompat.Light "" เพื่อแสดงการนำทางในพื้นหลังสีขาว แต่มันแสดงไอคอนสีเทาเริ่มต้นฉันต้องเปลี่ยนเป็นสีฟ้า "colorControlNormal และ android: textColorSecondary" ไม่ทำงาน
Steve Luck

2
ใช้ธีมที่กำหนดเองซึ่งมี "ThemeOverlay.AppCompat.Light" เป็นพาเรนต์ สิ่งนี้อาจใช้ได้
Oguz Ozcan

1
ฉันพบวิธีแก้ปัญหาเพื่อเปลี่ยนไอคอน nav โดยใช้ name = "colorControlNormal" ไม่ใช่ name = "android: colorControlNormal" แต่ฉันต้องการเปลี่ยน drawable อื่นอาจจะ?
Steve Luck

2

ถาดนี้:

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

ภายในonCreate();


มันใช้งานได้ แต่จะกลับมาได้อย่างไรก่อนหน้าปุ่มย้อนกลับ
Nadimuddin

0

ฉันใช้ภาพ back.png ในไฟล์โครงการ menifest.xml มันทำงานได้ดีในโครงการ

<activity
        android:name=".YourActivity"
         android:icon="@drawable/back"
        android:label="@string/app_name" >
    </activity>

0

ฉันมีปัญหาในทิศทางเดียวกันกับไอคอนของปุ่มโฮมแอ็กชันเนื่องจากพลาดการจัดการไอคอนในไอคอนไดเรคทอรีทรัพยากรของ Gradle

เหมือนในไดเรกทอรีทรัพยากร Arab Gradle คุณใส่ไอคอนใน x-hdpi และในไอคอนชื่อเดียวกันกับทรัพยากร Gradl ภาษาอังกฤษที่คุณใส่ในโฟลเดอร์ความหนาแน่นที่แตกต่างกันเช่น xx-hdpi ดังนั้นใน APK จะมีสองชื่อไอคอนเดียวกันในไดเรกทอรีที่แตกต่างกันดังนั้นอุปกรณ์ของคุณ จะเลือกไอคอนขึ้นอยู่กับความหนาแน่นอาจเป็น RTL หรือ LTR

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.