ActionBar पर बैक बटन को कैसे कस्टमाइज़ करें


188

मैं इनमें से सुझावों का उपयोग करके एक्शन बार की पृष्ठभूमि, लोगो छवि और टेक्स्ट रंग को अनुकूलित करने में सक्षम रहा हूं:
एंड्रॉइड: एक्शनबार "होम" आइकन को ऐप आइकन के अलावा कुछ और कैसे बदलें?
ActionBar टेक्स्ट का रंग
ActionBar बैकग्राउंड इमेज

अंतिम टुकड़ा जिसे मैं अनुकूलित करना चाहता हूं वह बैक बटन छवि है। यह डिफ़ॉल्ट रूप से ग्रे है और मैं इसे सफेद होना चाहूंगा। या तो रंग बदलना, एक ड्रॉबल को निर्दिष्ट करना या बस इसे पारदर्शी बनाना (और मेरी स्वनिर्धारित लोगो छवि में शेवरॉन को जोड़ना) काम करेगा। मैं उसे करके देखूं तो?


1
एक्शन बार पर कोई BACK बटन नहीं है। BACK बटन सिस्टम बार पर है, या स्क्रीन पर नहीं है (ऑफ-स्क्रीन BACK बटन वाले उपकरणों के लिए)।
कॉमन्सवेयर

1
@CommonsWare, मुझे यकीन नहीं है कि एक्शन बार में 'लेफ्ट शेवरॉन' को क्या कहा जाता है - लेकिन यह एक है जिसे मैं बैक बटन के रूप में संदर्भित कर रहा हूं। मुझे लगता है कि आगे जाने वाले Android उपकरणों पर भौतिक बैक बटन को बदलने की उम्मीद है।
सुनील गौड़ा

13
नहीं और नहीं। यह "अप" संकेतक है (तीर अभिविन्यास के बावजूद)। आप के माध्यम से इसे सक्षम setDisplayHomeAsUpEnabled()पर ActionBar। यह केवल "वापस" जाने के लिए विशेष रूप से नहीं माना जाता है। इसका मतलब है कि ऐप आइकन पर टैप करने से पिछली गतिविधि पर वापस जाने के बजाय एक पदानुक्रम "ऊपर" जाएगा (जैसा कि सिस्टम बार पर बैक बटन है)।
कॉमन्सवेयर

2
"तो उन नए उपकरणों के बारे में क्या है जिनके पास भौतिक बैक बटन नहीं है, क्या वे सभी एक 'सॉफ्ट' बैक बटन प्रदर्शित करते हैं" - उन सभी को सिस्टम बार में एक बैक बटन होना चाहिए।
कॉमन्सवेयर

3
बस मामलों का एक बहुत में उत्तर प्रदेश बटन जोड़ना चाहते हैं जाएगा बस वापस जाएँ। देखें "जब पहले देखी गई स्क्रीन भी वर्तमान स्क्रीन का पदानुक्रमित अभिभावक होती है, तो बैक की को दबाने पर एक उप बटन दबाने के समान परिणाम होगा - यह एक सामान्य घटना है।" developer.android.com/design/patterns
डोरी

जवाबों:


390

"अप" बर्दाश्त करने वाला संकेतक homeAsUpIndicatorथीम की विशेषता में निर्दिष्ट एक ड्रॉबल द्वारा प्रदान किया जाता है । अपने स्वयं के कस्टम संस्करण के साथ इसे ओवरराइड करने के लिए यह कुछ इस तरह होगा:

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

यदि आप अपने आवेदन के साथ पूर्व 3.0 का समर्थन कर रहे हैं, तो सुनिश्चित करें कि आपने कस्टम थीम के इस संस्करण को values-v11या इसी तरह से रखा है।


10
मेरे लिए भी काम करता है। मैं स्टाइल को एक्शन के रूप में सेट करने की घोषणा कर रहा था जैसे कि गितुब पर एओएसपी में मेरे एक्शनबर्टल थे लेकिन यह काम नहीं कर रहा था - मुख्य विषय में बाहर जाने की कोशिश की! +1
डोरी

37
<item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>मेरे लिए काम नहीं किया, लेकिन <item name="homeAsUpIndicator">@drawable/my_fancy_up_indicator</item>किया। लगता है कि यह एंड्रॉइड वर्जन की बात है
Michał K

6
वहाँ 0dp के लिए इस के लिए ऊपर और नीचे गद्दी सेट करने के लिए कोई रास्ता नहीं है?
जेम्स मैकक्रैकन

3
@JamesMcCracken मैं एक कस्टम लेआउट के माध्यम से ऐसा करने में सक्षम था।
greg7gkb

4
किसी के साथ यह काम किया Navigation Drawer? मुझे लगता ActionBarDrawerToggleहै कि अप इंडिकेटर को अपने में से एक के साथ बदल दिया जाता है, इसलिए इसे स्टाइल पर सेट करने से कोई प्रभाव नहीं पड़ता ...
लुकास जोटा

89

तो आप इसे homeAsUpIndicator () फ़ंक्शन का उपयोग करके आसानी से बदल सकते हैं जो एंड्रॉइड एपीआई स्तर 18 और ऊपरी में जोड़ा गया है।

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

यदि आप सपोर्ट लाइब्रेरी का उपयोग करते हैं

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


5
यदि आप एक दराज का उपयोग कर रहे हैं, तो आपको drawerToggle.setDrawerIndicatorEnabled(false);संकेतक बदलने से पहले कॉल करना होगा
फ्लॉस

2
@Floss धन्यवाद, setDrawerIndicatorEnabled (झूठा / सच); मेरी आवश्यकताओं के आधार पर होम बटन को सुसंगत 'बैक' और (ओपन दराज / क्लोज ड्रॉअर) के रूप में सेट करने की मेरी समस्या का समाधान किया।
अशरफ अलशावी

1
@Floss drawerToggle.setDrawerIndicatorEnabled (झूठा); यह मेरे लिए काम करता है :)
संदर्भ

30

मैंने प्रश्न की जाँच की है। यहाँ चरणों का पालन किया जाता है। स्रोत कोड GitHub पर होस्ट किया गया है: https://github.com/jiahaoliuliu/sherlockActionBarLab

पूर्व v11 उपकरणों के लिए वास्तविक शैली को ओवरराइड करें।

फ़ाइल कोड को डिफ़ॉल्ट मान फ़ोल्डर के स्टाइल स्टाइल। Xml में कॉपी और पेस्ट करें।

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

ध्यान दें कि माता-पिता को किसी भी शर्लक थीम में बदला जा सकता है।

V11 + उपकरणों के लिए वास्तविक शैली को ओवरराइड करें।

उसी फ़ोल्डर पर जहाँ फ़ोल्डर मान है, मान-v11 नामक एक नया फ़ोल्डर बनाएँ। Android स्वचालित रूप से इस फ़ोल्डर की सामग्री को एपीआई या उससे ऊपर के उपकरणों के लिए देखेगा।

एक नई फ़ाइल बनाएं जिसे style.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 या उससे ऊपर के उपकरणों के लिए, शर्लक एक्शन बार एंड्रॉइड के साथ आने वाले डिफ़ॉल्ट एक्शन बार का उपयोग करता है, जिसका प्रमुख नाम एंड्रॉइड है: homeAsUpIndicator। लेकिन एपीआई 10 या उससे कम वाले उपकरणों के लिए, शर्लक एक्शन बार अपने स्वयं के एक्शनबार का उपयोग करता है, जिसे अप इंडिकेटर के रूप में घर को सरल "होमएस्प यूइंडिकेटर" कहा जाता है।

प्रकट में नई थीम का उपयोग करें

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 आज़मा सकते हैं।
मेसन ली

25

नेविगेशन आइकन बदलना क्रिया और टूलबार के लिए भिन्न होता है।

ActionBar ओवरराइड homeAsUpIndicatorविशेषता के लिए:

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

टूलबार ओवरराइड navigationIconविशेषता के लिए:

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


5

यदि आप टूलबार का उपयोग कर रहे हैं, तो आपको उन समाधानों की आवश्यकता नहीं है। आपको केवल टूलबार की थीम बदलनी होगी

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

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

यदि आप एक dark.actionBar का उपयोग कर रहे हैं, तो आपका बैक बटन सफेद होने जा रहा है यदि आप लाइट एक्शनबार थीम का उपयोग कर रहे हैं तो यह काला होने वाला है।


आपका कोड मेरे लिए काम करता है, लेकिन क्या हम उस संकेतक का रंग बदल सकते हैं?
स्टीव लक

2
colorControlNormal and android: textColorSecondary मान इसके लिए जिम्मेदार हैं लेकिन मुझे यकीन नहीं है कि ये मूल्य और भी बदलते हैं। आप अपने टूलबार थीम पर इन मूल्यों को परिभाषित करके खुद को आज़मा सकते हैं।
ओगुज़ ओजकैन

मैं बैकग्राउंड व्हाइट में नेविगेशनआईकॉन प्रदर्शित करने के लिए "app: theme =" @ style / ThemeOverlay.AppCompat.Light "" का उपयोग कर रहा हूं, लेकिन यह डिफ़ॉल्ट ग्रे आइकन प्रदर्शित कर रहा है, मुझे इसे नीले रंग में बदलने की आवश्यकता है। "colorControlNormal और android: textColorSecondary" काम नहीं करता है।
स्टीव लक

2
एक कस्टम थीम का उपयोग करें जिसमें माता-पिता के रूप में "ThemeOverlay.AppCompat.Light" है। यह काम कर सकता है।
ओगुज़ ओजकैन

1
मुझे नाम = "colorControlNormal" नहीं नाम = "android: colorControlNormal" का उपयोग करते हुए, नौसेना आइकन को बदलने का समाधान मिला। लेकिन मैं दूसरे ड्रॉबल में बदलना चाहता हूं, हो सकता है?
स्टीव लक


0

मैंने प्रोजेक्ट menifest.xml फ़ाइल में back.png छवि का उपयोग किया। यह परियोजना में ठीक काम कर रहा है।

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

0

ग्रैडल रिसोर्स डाइरेक्टरी आइकन में आइकन के प्रबंधन के कारण मेरे पास एक्शन-बार होम बटन आइकन दिशा का एक ही मुद्दा था

जैसे अरबी ग्रैडल रिसोर्स डायरेक्टरी में आपने x-hdpi में आइकन डाला है और अंग्रेज़ी में ग्रैडल रिसोर्स एक ही आइकॉन नाम है, जिसे आपने अलग-अलग डेंसिटी फोल्डर में रखा है जैसे कि xx-hdpi, ताकि एपीके में अलग-अलग डायरेक्टरी में दो एक ही आइकॉन के नाम होंगे, इसलिए आपका डिवाइस घनत्व निर्भर आइकन उठाएगा RTL या LTR हो सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.