2012-05-31 17 views
15

पर एक कस्टम शेयर आइकन सेट करना मैं आइकन ShareActionProvider आइकन सेट करने का प्रयास कर रहा हूं, अर्द्ध पारदर्शी सफेद के बजाय ठोस सफेद की आवश्यकता है।एक्शनबार ShareActionProvider

हालांकि share_menu.xml और कोड में सेटिंग काम नहीं करती है। बस यह सोचकर कि शेयरएक्शनप्रोवाइडर को विस्तारित करने से पहले किसी के लिए कामकाज हो गया है या नहीं। (ActionBarSherlock मैं उपयोग कर रहा हूँ)

@Override 
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) { 
    inflater.inflate(R.menu.share_menu, menu); 
    MenuItem actionItem = menu.findItem(R.id.share_action_provider); 

    ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); 
    actionProvider.setShareIntent(mShareIntent); 

    // re-setting the icon as it's not being picked up from the menu xml file 
    actionItem.setIcon(R.drawable.ic_action_share); 

    super.onCreateOptionsMenu(menu, inflater); 

} 

share_menu.xml

<item android:id="@+id/share_action_provider" 
     android:showAsAction="ifRoom" 
     android:title="@string/share_with" 
     android:icon="@drawable/ic_action_share" 
     android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider" /> 

अद्यतन: भी शैली में यह स्थापित करने की कोशिश की, लेकिन कोई खुशी

<style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
     <item name="actionModeStyle">@style/ActionModeStyle</item> 
     <item name="android:actionModeStyle">@style/ActionModeStyle</item> 
</style> 

<style name="ActionModeStyle" parent="Widget.Sherlock.ActionMode"> 
     <item name="actionModeShareDrawable">@drawable/ic_action_share</item> 
    </style> 

उत्तर

17

मैं करने के लिए देख रहा हूँ जब एक्शन बार को कस्टमाइज़ करें, आम तौर पर मुझे लगता है कि पहली जगह एक्शनबैरशेल थीम और शैलियों है।

मैंने पाया कि शेरलॉक थीम theme.xml फ़ाइल में मिली "actionModeShareDrawable" का उपयोग करती है।

"actionModeShareDrawable" आइटम को सीधे शामिल करने के लिए अपनी थीम बदलने का प्रयास करें।

<style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
    <item name="actionModeShareDrawable">@drawable/ic_action_share</item> 
</style> 
+8

यह केवल इसलिए काम करेगा क्योंकि सभी प्लेटफ़ॉर्म पर आंतरिक संस्करण का उपयोग किया जाता है। अंतर्निहित 'ShareActionProvider' ड्रॉइंग निर्दिष्ट करने के लिए एक गैर-सार्वजनिक संसाधन का उपयोग करता है, इसलिए यह समाधान बहुत ActionBarSherlock-विशिष्ट है। –

+3

एक्शनमोडशेयर मुख्य विषय में हटाने योग्य, जिंजरब्रेड और ics दोनों पर काम करने लगता है। – scottyab

+2

जेबी या जीबी पर मेरे लिए कोई फर्क नहीं पड़ता। –

1

आप इस तरह की गैर-सार्वजनिक विशेषता को ओवरराइड कर सकते हैं।

1)

<style name="MyAppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="actionBarWidgetTheme">@style/Theme.AppCompat.CustomShareIcon</item> 
    <item name="android:actionBarWidgetTheme">@style/Theme.AppCompat.CustomShareIcon</item> 
</style> 

दूसरे शब्दों में:

<style name="Theme.MyApp" parent="android:Theme.Holo"> 
     <item name="*android:actionModeShareDrawalbe">@drawable/icon</item> 
</style> 

(*) AppCompat के लिए 2 शैलियों में परिवर्तन की आवश्यकता है एंड्रॉयड

+1

यह विकल्प विभिन्न उपकरणों पर क्रैश का कारण बनता है। गैर-सार्वजनिक एंड्रॉइड विशेषताओं का उपयोग करने के लिए यह बहुत निराश है। –

+3

तो क्या गैर शेरलॉक विषयों के लिए कोई समाधान है? मैं कस्टम थीम का उपयोग कर रहा हूं जो होलो को लाता है। लाइट। बात यह है कि होलो के अंधेरे भूरे रंग के आइकन के बजाय मेरे शेयर एक्शन आइकन को सफेद होना चाहिए। लाइट। मैंने दिखाए गए गैर-सार्वजनिक विशेषता को ओवरराइड करने का प्रयास किया है, लेकिन शुरुआत में मेरा डिवाइस क्रैश .no को और परीक्षण करने की आवश्यकता है :)। तो .. कोई अन्य समाधान? – bajicdusko

7

में गैर सरकारी संसाधनों के संदर्भ में इसका मतलब है , attr:actionModeShareDrawable को आपके MyAppTheme में निर्दिष्ट करने की आवश्यकता नहीं है, लेकिन इसका उल्लेख आपकेमें किया जाना चाहिए 210 निम्नलिखित के रूप में:

2)

<style name="Theme.AppCompat.CustomShareIcon" parent="@style/Theme.AppCompat"> 
    <item name="actionModeShareDrawable">@drawable/abc_ic_menu_share_holo_dark</item> <!-- your icon goes here --> 
</style> 
6

अद्यतन: नीचे दिए गए मुश्किल रास्ता, बस उप-वर्ग ShareActionProvider के बारे में भूल onCreateActionView विधि में अशक्त लौटने के लिए, और menu.xml फ़ाइल में अपने स्वयं के चिह्न प्रदान करते हैं सब कुछ ठीक हो जाएगा

===========================

मैं एक बहुत ही मुश्किल लेकिन कोई भी-ActionBarSherlock विशेष रास्ता मिल गया :

  1. उप-वर्ग ShareActionProvider, बस थोड़ी ट्वीक साथ:

    @Override 
    public View onCreateActionView() { 
        View target = super.onCreateActionView(); 
        ViewGroup viewGroup = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.actionbutton_share, null); 
        ImageView overlay = (ImageView) viewGroup.findViewById(R.id.overlay); 
        ViewGroup container = (ViewGroup) viewGroup.findViewById(R.id.container); 
        container.addView(target); 
        container.getLayoutParams().width = overlay.getLayoutParams().width; 
        container.getLayoutParams().height = overlay.getLayoutParams().height; 
        return viewGroup; 
    } 
    
  2. एक लेआउट फ़ाइल (R.layout.actionbutton_share) है, जो उपयोगकर्ता के लिए शीर्ष लेकिन पारदर्शी पर मूल दृश्य जगह बनाएं (ध्यान दें " एंड्रॉयड: अल्फा = 0 "भाग):

    <?xml version="1.0" encoding="utf-8"?> 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:tools="http://schemas.android.com/tools" 
        android:layout_width="wrap_content" 
        android:layout_height="match_parent" 
        android:orientation="vertical" > 
    
        <FrameLayout 
         android:id="@+id/container" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_centerHorizontal="true" 
         android:layout_centerVertical="true" 
         android:alpha="0" /> 
    
        <ImageView 
         android:id="@+id/overlay" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_centerHorizontal="true" 
         android:layout_centerVertical="true" 
         android:layout_marginLeft="7dp" 
         android:layout_marginRight="7dp" 
         android:src="@drawable/yours_whatever_share_icon" 
         tools:ignore="ContentDescription" /> 
    
    </RelativeLayout> 
    
  3. अपने मेनू में काट दिया ShareActionProvider का प्रयोग करें।xml फ़ाइल

+0

सुपर। ओवरराइड और रिटर्न नल ने खूबसूरती से काम किया – LumberHack

+1

उत्तराधिकारी, वापस शून्य विचार को अपना जवाब दिया जाना चाहिए। यह मेरे लिए काम किया। जिस तरह से यह उत्तर लिखा गया है वह पहले भ्रमित है। –

3

vivimice के समाधान अच्छा है, लेकिन साझा करने के लिए पिछली बार उपयोग अनुप्रयोग के आइकन भी छिप जाता है।

मैं किसी भी ShareActionProvider बिना एक आम मेनू आइटम के रूप में कस्टम साझा करें आइकन किया था, सिर्फ onOptionsItemSelected() विधि इस कोड का इस्तेमाल किया में:

Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
sendIntent.setType("text/plain"); 
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to))); 

यह एक पॉपअप मेनू नहीं बनाता है, लेकिन किसी चयनकर्ता संवाद।

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