2014-10-31 6 views
8

अपने प्रोजेक्ट पर जब तक कुछ दिन पहले मैं शर्लक ActionBar इस्तेमाल किया, लेकिन मैं नई सामग्री डिजाइन करने के लिए पूरे ActionBar शैली बदलने के लिए dicided। बैक और ओवरफ्लो आइकन के लिए मेरी पुरानी थीम पर मेरे विषय पर कुछ कस्टम आइकन सेट किए गए थे। लेकिन एपकोम्पेट पर मैंने इसे अपनी थीम पर परिभाषित करने की कोशिश की जहां मैं इसे टूलबार पर उपयोग करता हूं लेकिन यह काम नहीं कर रहा है। कोई भी जानता है कि इसे कैसे संभव बनाया जाए?एंड्रॉयड: 21 AppCompat, कैसे एक कस्टम एक करने के लिए वापस आइकन और अतिप्रवाह चिह्न बदलने के लिए?

मेरे विषय जहाँ मैं उपकरण पट्टी पर का उपयोग करें (संपत्ति स्टूडियो के साथ जनरेट किया गया):

<style name="Theme.Themewiz" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/ActionBar.Solid.Themewiz</item> 

    <item name="android:actionBarItemBackground">@drawable/selectable_background_themewiz</item> 
    <item name="android:popupMenuStyle">@style/PopupMenu.Themewiz</item> 
    <item name="android:dropDownListViewStyle">@style/DropDownListView.Themewiz</item> 
    <item name="android:actionBarTabStyle">@style/ActionBarTabStyle.Themewiz</item> 
    <item name="android:actionDropDownStyle">@style/DropDownNav.Themewiz</item> 
    <item name="android:actionModeBackground">@drawable/cab_background_top_themewiz</item> 
    <item name="android:actionModeSplitBackground">@drawable/cab_background_bottom_themewiz</item> 
    <item name="android:actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Themewiz</item> 

      <!-- Light.DarkActionBar specific --> 
    <item name="android:actionBarWidgetTheme">@style/Theme.Themewiz.Widget</item> 

    <item name="android:actionOverflowButtonStyle">@style/Theme.AppCompat.Overflow</item> 

</style> 

<style parent="@style/Widget.AppCompat.ActionButton.Overflow" name="Theme.AppCompat.Overflow"> 

    <item name="android:src">@drawable/ic_action_overflow</item> 

</style> 

टूलबार xml:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/my_awesome_toolbar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimaryDark" 
    app:theme="@style/Theme.Themewiz" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 
+0

कोड? एक्सएमएल? इसके बिना मदद करना असंभव है। –

+0

मैं xmlfrom विषय और उपकरण पट्टी से एक्सएमएल के साथ अपने मूल पोस्ट को संपादित करें। – billiout

उत्तर

12

appcompat 21 का उपयोग हासिल करने के लिए इन बहुत आसान है।

वापस आइकन बदलने के लिए, आप इसके बजाय अपने ActionBar के रूप में समर्थन टूलबार का उपयोग करना होगा। This post by Chris Banes आप आरंभ करना चाहिए।

एक बार जब आप उपकरण पट्टी को जोड़ने काम हो गया, तुम सब करने की ज़रूरत है:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_id); 
toolbar.setNavigationIcon(R.drawable.back_icon); 

दूसरी ओर अतिप्रवाह आइकन बदलने के लिए, सबसे आसान तरीका है मुख्य विषय के लिए एक कस्टम शैली को जोड़ने के लिए है घोषणा। कुछ ऐसा:

<resources> 
    <!-- Base application theme. --> 
    <style name="Your.Theme" parent="@style/Theme.AppCompat"> 
     <!-- Your theme items go here --> 

     <item name="actionOverflowButtonStyle">@style/OverFlow</item> 
    </style> 

    <!-- Styles --> 
    <style name="OverFlow" parent="@android:style/Widget.AppCompat.ActionButton.Overflow"> 
     <item name="android:src">@drawable/overflow_icon</item> 
    </style> 

</resources> 

आशा है कि मदद करता है।

+2

मेरे लिए काम किया, का उपयोग करते हुए 'छोड़कर @ शैली/के बजाय' @Android Widget.AppCompat.ActionButton.Overflow': शैली/Widget.AppCompat.ActionButton.Overflow' – Birrel

+0

यह मेरे लिए काम किया, लेकिन इसके बारे में एक वास्तव में बड़ी संस्करण का उपयोग कर रहा है मेरी आइकन। मेरे पास एकाधिक ड्रॉइंग फ़ोल्डर्स में एकाधिक आइकन हैं, लेकिन ऐसा लगता है कि यह मेरे आकार के किसी भी आइकन से मेल नहीं खाता है। –

+0

दरअसल, मुझे उस समस्या का समाधान मिला जो मैं कर रहा था। मुझे 24 डीपी आइकन का उपयोग करना पड़ा। आप मेरा SO प्रश्न और इसका उत्तर यहां देख सकते हैं: http: // stackoverflow।कॉम/प्रश्न/32450144/कस्टम-ओवरफ्लो-आइकन-बहुत-बड़े-उपयोग-एंड्रॉइड-समर्थन-v7-and-appcompat –

4

मैं इस तरह से किया है और यह मेरे लिए काम करता

<style name="AppTheme.Base" parent="Theme.AppCompat.Light"> 
    <item name="actionOverflowButtonStyle">@style/OverFlow</item> 
</style> 

<style name="OverFlow" parent="Widget.AppCompat.ActionButton.Overflow"> 
    <item name="android:src">@drawable/custom_button</item> 
</style> 
-3

कोड नीचे बदलें नेविगेशन तीर जांच के लिए

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
upArrow.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP); 
getSupportActionBar().setHomeAsUpIndicator(upArrow); 

पहले हम में अतिप्रवाह मेनू आइकन के लिए सामग्री वर्णन विशेषता जोड़ने की जरूरत शैलियों.एक्सएमएल फ़ाइल। यह कोई स्ट्रिंग हो सकती है, इसके बाद कोड में बाद में उचित विवरण खोजने के लिए इसकी आवश्यकता होती है।

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.MyTheme"> 
    <!-- Customize your theme here. --> 
    <item name="android:actionOverflowButtonStyle">@style/Widget.ActionButton.Overflow</item> 
</style> 

<style name="Widget.ActionButton.Overflow" parent="@android:style/Widget.Holo.ActionButton.Overflow"> 
    <item name="android:contentDescription">@string/accessibility_overflow</item> 
</style> 

दूसरा, हम विधि खोजने और अतिप्रवाह आइकन colorizing के लिए जिम्मेदार लागू:

/* It's important to set overflowDescription atribute in styles, so we cangrab the reference 
* to the overflow icon. Check: res/values/styles.xml 
* @param activity 
* @param colorFilter 
*/ 
private static void setOverflowButtonColor(final Activity activity, final PorterDuffColorFilter colorFilter) { 
    final String overflowDescription = activity.getString(R.string.abc_action_menu_overflow_description); 
    final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); 
    final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); 
    viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      final ArrayList<View> outViews = new ArrayList<View>(); 
      decorView.findViewsWithText(outViews, overflowDescription, 
        View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
      if (outViews.isEmpty()) { 
       return; 
      } 
      TintImageView overflow=(TintImageView) outViews.get(0); 
      overflow.setColorFilter(colorFilter); 
      removeOnGlobalLayoutListener(decorView,this); 
     } 
    }); 
} 

/***Use below code in your activity screen for apply color*/ 

final PorterDuffColorFilter colorFilter= new PorterDuffColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY); 
setOverflowButtonColor(this,colorFilter); 

पता अधिक https://snow.dog/blog/how-to-dynamicaly-change-android-toolbar-icons-color/

+0

कृपया मेरा नया अपडेट जांचें यदि कोई प्रश्न – Piyush

+0

क्या अतिप्रवाह बटन प्राप्त करना संभव है शैली सेट किए बिना रनटाइम पर? –

4

हो रही विचारों के लिए लिंक नीचे की जांच करें खुद को थोड़ा मुश्किल है , लेकिन टूलबार के कार्यों का उपयोग करके उनके आइकन और/या रंग को सेट करना संभव है। उदाहरण:

toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
final Drawable navigationIcon = toolbar.getNavigationIcon(); 
toolbar.setNavigationIcon(getTintedDrawable(this, navigationIcon, 0xffff0000)); 
final Drawable overflowIcon = toolbar.getOverflowIcon(); 
toolbar.setOverflowIcon(getTintedDrawable(this, overflowIcon, 0xffff0000)); 

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) { 
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); 
    DrawableCompat.setTint(wrapDrawable, color); 
    DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN); 
    return wrapDrawable; 
} 
+0

धन्यवाद दोस्तों आपकी चाल मेरे लिए मदद .... –

+0

अच्छा काम चारों ओर! यह मेरे लिए काम किया – Arjun

संबंधित मुद्दे