2012-07-09 15 views
15

मैं एक्शन बार में जोड़े गए ड्रॉप डाउन सूची में आइटम्स को स्टाइल करने के लिए थोड़ी देर के लिए कोशिश कर रहा हूं, लेकिन मैं सही कोड के साथ नहीं आ सकता।स्टाइलिंग शेरलॉक एक्शन बार ड्रॉप डाउन आइटम

मैंने abs__styles.xml और abs__themes.xml को SherlockActionBar प्रोजेक्ट में देखने का प्रयास किया लेकिन मेरे प्रोजेक्ट में जोड़े गए किसी भी आइटम ने काम नहीं किया।

तरह से मैं मेनू बना रहा हूं निम्नलिखित है:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Sharing icons 
     SubMenu submenu = menu.addSubMenu(null); 
     submenu.add(getResources().getString(R.string.twitter)); 
     submenu.add(getResources().getString(R.string.facebook)); 
     submenu.add(getResources().getString(R.string.email)); 

     // Share button itself 
     MenuItem ShareButton = submenu.getItem(); 
     ShareButton.setIcon(R.drawable.icon_share_triangle); 
     ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     // Twitter submenu button 
     MenuItem TwitterItem = submenu.getItem(0); 
     TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
     TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       setShareTwitterIntent(); 
       return true; 
      } 
     }); 
... 
} 

मैं भी निम्नलिखित कोड का उपयोग कर इस post पर एक नज़र डालने की कोशिश की है, लेकिन फिर भी प्रयास विफल:

<!-- style the list navigation --> 
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item> 
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item> 
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item> 
</style> 

मैं बस ड्रॉप डाउन सूची में आइटम के पृष्ठभूमि रंग को बदलने की जरूरत है।

आपकी मदद के लिए बहुत बहुत धन्यवाद!

संपादित करें:

मैं भी इस की कोशिश की, और यह अभी भी काम नहीं करता:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item> 
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item> 
... 
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> 
     <item name="android:background">@drawable/sharing_panel</item> 
</style> 
+0

क्या आपकी कस्टम थीम Theme.Holo.Light.DarkActionBar से प्राप्त हो रही है? –

+0

क्या आपको अपनी समस्या हल हो गई? – Spike

+0

यह मेरी परियोजना में स्थगित हो गया क्योंकि यह कम प्राथमिकता थी, लेकिन जैसे ही मैं इसे ठीक करता हूं, मैं आपको लोगों को बता दूंगा .. – noloman

उत्तर

27

मुझे एक ही समस्या थी और बहुत सारे सिर खरोंच के बाद - कुत्ते की तरह बुरे के बुरे मामले के साथ खरोंच की तरह - मुझे यह काम करने के लिए मिला। यह एबीएस 4.1 (9 0) के साथ है। नीचे दिया गया कोड ड्रॉप डाउन आइटम के पृष्ठभूमि रंग को बदल देगा।

SomeActivity.java

Context context = ab.getThemedContext(); 
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list, 
    R.layout.sherlock_spinner_item); 
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 

ध्यान दें: आप createFromResource और R.layout.sherlock_spinner_dropdown_item setDropDownViewResource के लिए के लिए R.layout.sherlock_spinner_item का उपयोग करें। यह एबीएस स्रोत में नमूने में क्या दिखाई देता है: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

इसका कारण यह है क्रिया बार में नहीं चुना जाता लटकती जब sherlock_spinner_item लेआउट है और वास्तविक लटकती आइटम sherlock_spinner_dropdown_item लेआउट जिसका मतलब है शैलियों के लिए अलग हैं का उपयोग करें प्रत्येक:

  • sherlock_spinner_item
    • एंड्रॉयड: spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • एंड्रॉयड: spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

याद रखें दोनों शैलियों की जरूरत है - एंड्रॉयड: एंड्रॉयड के बिना पहले से जुड़ा हुआ शैलियों देशी आईसीएस ActionBar और शैली के लिए के लिए : आईसीएस से पुराने उपकरणों पर AcrionBarSherlock शैली के लिए उपसर्ग है।

res/values ​​/ styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
     <!-- the text when loading --> 
     <!-- 
     <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     --> 

     <!-- the dropdown items --> 
     <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 
     <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 

     <!-- the action bar dropdown menu item --> 
     <!-- 
     <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     --> 
    </style> 

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
     <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
     <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
    </style> 

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> 
    <item name="android:textColor">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner"> 
     <item name="android:background">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem"> 
     <item name="android:background">@color/orange</item> 
    </style> 

</resources> 

res/values ​​/ color.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<color name="orange">#ffEf4f1f</color> 

</resources> 

कृपया जवाब के रूप में चिह्नित करते हैं तो यह आपके लिए यह हल करती है। धन्यवाद!

लिंक: शैलियों

ब्राउज़:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

ब्राउज़ विषयों:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

+2

कोई यह काम नहीं करता है जैसे आप ने कहा। फिर भी मैंने अपनी पोस्ट को अपडेट किया कि मैं मेनू कैसे बना सकता हूं। – noloman

+0

अजीब है, यह मेरी परियोजना में मेरे लिए काम किया। शायद आपकी शैलियों/विषयों में अन्य बदलाव हैं जो इसे प्रभावित कर रहे हैं। –

+0

के लिए मुझे getThemedContext() का उपयोग किया गया था के बजाय सिर्फ गतिविधि गुजर कुंजी। धन्यवाद! – phreakhead

0

ActionBarSherlock अपने 3 विषयों में से एक का उपयोग करने की आवश्यकता है। आप उन्हें हालांकि विस्तार कर सकते हैं और ड्रॉप-डाउन शैली ओवरराइड, इस तरह:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light"> 
    <item name="actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 

यह आपको होलो प्रकाश विषय चाहते हैं यह सोचते है, और आपका लटकती शैली MyDropDownDav है।

फिर अपने कोड में, आप बस अपनी थीम का उपयोग करने के लिए स्विच करें (या तो मैनिफेस्ट में, या इसे गतिविधि के ऑनक्रेट में करें)।

+0

सुनिश्चित करें कि आप ' @ style/MyDropDownNav 'ताकि देशी एक्शन बार इसका उपयोग हनीकॉम और बाद में भी कर सके। – Karakuri

+0

मैंने एक <शैली नाम = "MyTheme" पैरेंट = "थीम.Sherlock.Light"> @ drawable/sharing_panel_correct @ drawable/sharing_panel_correct लेकिन यह अभी भी काम नहीं करता है, कोई मतभेद नहीं .. – noloman

4

पृष्ठभूमि (शर्लक क्रिया बार में मेनू आइटम का drawable v4 को बदलने के लिए। 1.0), निम्न का उपयोग करें:

<style name="My_Theme" parent="Theme.Sherlock"> 
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
    <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
</style> 

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow"> 
    <item name="android:popupBackground">@drawable/menu_item_background</item> 
</style> 

उम्मीद है कि इससे मदद मिलती है।

3

मैं मुझे

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/spinner_background_holo_light</item> 
    <item name="android:popupBackground">@color/actionbar_normal</item> 
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item> 
</style> 

<style name="myTheme" parent="@style/Theme.Sherlock"> 
    ... 
    ... 
    ... 
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item> 
    <item name="actionDropDownStyle">@style/MyDropDownItem</item> 
</style> 

जहां,

"spinner_background_holo_light" और "list_selector_holo_light" हैं चयनकर्ताओं

और

"actionbar_normal" drawable (छवि के लिए इस है और उनका कार्य के लिए इस्तेमाल किया या रंग)

2

मुझे यकीन नहीं है कि इस प्रश्न का उत्तर एक संतोषजनक तरीके से दिया गया है, लेकिन मैं इस समस्या में भाग गया और मुझे वह जवाब नहीं मिला जो मुझे पसंद आया।ऐसा लगता है कि मेरे पास ActionBarSherLock की एक सुंदर मानक कॉन्फ़िगरेशन थी और ड्रॉप डाउन नेविगेशन का उपयोग करके मुझे बॉक्स से कुछ खराब परिणाम दिए गए। एक काले रंग की पृष्ठभूमि पर काला पाठ। मैं पाठ को सफेद बनाना चाहता हूं।

<style name="AppBaseTheme" parent="Theme.Sherlock"> 
</style> 

मेरे वास्तविक आवेदन विषय AppTheme मेरी आधार का विस्तार (मैं याद नहीं कर सकते कारण है कि मैं पर यह काम किया:

शुरुआत के लिए, अपने आवेदन के आधार विषय Theme.Sherlock फैली: यहाँ मैं इसे कैसे पूरा किया है समय, यह अनावश्यक संभावना है)।

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item> 
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item> 
</style> 

मैं Widget.Sherlock.TextView.SpinnerItem ओवरराइड करने के लिए की जरूरत है और इतनी के रूप में नीचे:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem"> 
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item> 
</style> 

ऐसा करने के लिए कारण TextApperance विजेट का उपयोग करने की थी: TextAppearance.Sherlock.Widget.TextView.SpinnerItem

यह नीचे के रूप में ओवरराइड की गई थी:

<style name="TextAppearance.MySpinnerItem" parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 

टी प्राप्त करने में मेरी सबसे बड़ी गलती वह इसे ठीक करने की कोशिश में पाठ को ओवरराइड स्पिनर इटैम स्टाइल में टेक्स्ट रंग सेट करने की कोशिश कर रहा था। चूंकि यह एक टेक्स्टपेरेंस विजेट का उपयोग करता था, यह अभी काम नहीं कर रहा था।

फिर इस काम करने के लिए मेरे कोड इस तरह दिखता है (मेरी गतिविधि के onCreate विधि में):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this, 
      R.array.call_type, R.layout.sherlock_spinner_item); 

OnNavigationListener onNavigationListener = new OnNavigationListener() { 
     // Get the same strings provided for the drop-down's ArrayAdapter 
     String[] strings = getResources().getStringArray(R.array.call_type); 

     @Override 
     public boolean onNavigationItemSelected(int position, long itemId) { 
      String filter = strings[position]; 
      filterCalls(filter); 
      return true; 
     } 
    }; 

ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    actionBar.setListNavigationCallbacks(spinnerAdapter, 
      onNavigationListener); 

यह मेरा पाठ का रंग बदलने की अनुमति, ActionBarSherlock का उपयोग कर नीचे स्पिनर ड्रॉप पर।

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