ActionBarSherlock और ActionBar संगतता के बीच अंतर


156

ActionBarSherlock और Action Bar संगतता के बीच अंतर क्या है

Fews दिनों पहले Google ने ActionBar संगतता जारी की जो मुझे इतना भ्रमित करती है। क्या एक्शन बार संगतता ActionBarSherlock के समान है और कोडिंग समान है?

उदाहरण: क्या ऐप आइकन " बार " या ActionBar नेविगेट करने के लिए है । एक्शन बार संगतता में समर्थित है?


12
FYI करें मैंने स्क्वायर ब्लॉग के लिए इस बारे में एक ब्लॉग पोस्ट लिखा है: corner.squareup.com/2012/05/actionbarsherlock-as-a-base.html
जेक व्हार्टन

3
youtube.com/… यह Google ने ActionBarSherlock बनाम ActionBarCompact के बारे में क्या सोचा है
रॉल्फ

यह उन लोगों के लिए एक महत्वपूर्ण और उपयोगी धागा है, जो ABS से ABCompat की ओर पलायन करना चाहते हैं। धन्यवाद।
अशोकचक्रवर्ती नागराजन

जवाबों:


61

ActionBarSherlock आपके एप्लिकेशन को इस बात की परवाह किए बिना * एक्शन बार देता है कि आपका एप्लिकेशन Android API के किस संस्करण पर चलाया जा रहा है। एक्शन बार कम्पेटिबिलिटी आपको एक्शन बार केवल तब देती है जब आप जिस डिवाइस पर चल रहे हैं वह एपीआई स्तर 3.0 या उससे ऊपर है।

* ध्यान दें कि यदि आप जिस डिवाइस पर चल रहे हैं, वह 3.0 या उससे अधिक नहीं है, तो ActionBarSherlock एक देशीय नहीं बल्कि एक्शन बार का अपना कस्टम कार्यान्वयन है।

--EDIT--

ऐसा प्रतीत होता है कि चीजें बदल गई हैं और ActionBarSherlock और Action Bar संगतता के बीच वास्तव में कोई अंतर नहीं है। कृपया विवरण के लिए नीचे टिप्पणी पढ़ें।

--EDIT--

अब दोनों का उपयोग करने के बाद, मैं कह सकता हूं कि मैं वास्तव में एक्शन बार संगतता के लिए एक्शनबेरलॉक पसंद करता हूं। ActionBarSherlock उपयोग करने के लिए वास्तव में आसान और अच्छा है।

--EDIT-- जैसा कि LOG_TAG ने उल्लेख किया है, अब एंड्रॉइड सपोर्ट लाइब्रेरी में एक्शन बार के लिए समर्थन है। मुझे अभी तक इसका उपयोग करने का मौका नहीं मिला है, लेकिन मुझे लगता है कि इसका उपयोग करने के लिए सबसे अच्छा है।


1
@Anidamo सिर के लिए धन्यवाद। मैं पागल हो सकता हूं, लेकिन मैं कसम खा सकता हूं कि एक बिंदु पर, एंड्रॉइड संगतता पैक में संस्करण आपको एक नहीं दे सकता है यदि आपका पूर्व 3.0। मैंने अपना उत्तर संशोधित कर लिया है।
कुर्तिस नुसबूम

35
इसके अलावा, उत्तर पूरी तरह से गलत है - संगतता उदाहरण का उद्देश्य पूर्व 3.0 उपकरणों का समर्थन करना है।
एलिकएल्ज़िन-किलाका

8
Google ने ActionBarCompat नामक एक नया बैकवर्ड-कम्पेटिबल एक्शन बार कार्यान्वयन जारी किया, जो सपोर्ट लाइब्रेरी r18 का हिस्सा है। ActionBarCompat API आपको Android 2.1 पर व्यापक संगतता के साथ अपने ऐप में आवश्यक एक्शन बार डिज़ाइन पैटर्न बनाने देता है।
LOG_TAG

3
निम्नलिखित लिंक आपको बताता है whyऔर howनए ActionBarCompat API का उपयोग करने के लिए, android-developers.blogspot.in/2013/08/…
VenoM

2
बस जोड़ने के लिए, जो सोचते हैं कि वे अपने ऐप में क्रोमकास्ट एकीकरण चाहते हैं, मैं अत्यधिक ऐपकोमेट लाइब्रेरी का उपयोग करने की सलाह दूंगा। Chromecast एकीकरण के लिए आवश्यक MediaRouter API Appcompat पर निर्भर करता है; ActionBarSherlock का उपयोग नहीं किया जा सकता है।
क्लू

113

ActionBarSherlock बनाम ActionBarCompat:

मैं बस ActionBarSherlock बनाम ActionBarCompat Lib के बीच कुछ कोड अंतर रखना चाहता हूं

 ActionBarSherlock बनाम ActionBarCompat ** मजबूत पाठ **

हम ActionBarCompat से ActionBarComlock से कुछ ऐप्स माइग्रेट कर सकते हैं:

कदम:

  1. आयात AppCompat परियोजना।

  2. बदलें SherlockFragmentActivityके साथ ActionBarActivity

  3. बदलें SherlockFragmentके साथ Fragment

  4. बदलें Menu, MenuItemऔर getSupportMenuInflater()संदर्भ। एक्शन व्यूज़ प्राप्त करने के तरीके को संशोधित करें।

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. अपने विषय - वस्तु और शैलियों को संशोधित करें ।

अधिक जानकारी के लिए, कृपया इस स्लाइड को + NickButcher (Google) द्वारा देखें

यहां छवि विवरण दर्ज करें

सूत्रों का शुक्रिया: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock

इस developer.android को पढ़ना न भूलेंएबीसी के बारे में अधिक के लिए !

ध्यान दें: इकाई परीक्षणों के लिए इसे स्थापित करना उसी तरह से है जैसे दुर्भाग्य से समर्थन पुस्तकालय के साथ संभव नहीं है।

आउटपुट:

यहां छवि विवरण दर्ज करें

क्रेडिट: गेब्रियल सेराओटी


1
बस एक अद्यतन है कि ABS को अब ग्रैडल परियोजनाओं के माध्यम से भी जोड़ा जा सकता है compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'और इसके लिए लाइब्रेरी प्रोजेक्ट नहीं होना चाहिए।
अंकुशग

विस्तार से स्पष्टीकरण के लिए धन्यवाद
बिस्वाजीत दास

41

बस एक पुरातन उदाहरण के साथ क्या @Kurtis Nusbaum पूरा कर रहा है।

अद्यतन: जैसा कि @ rudy-s ने कहा, नवीनतम एंड्रॉइड सपोर्ट लाइब्रेरी (एपीआई 18) के साथ, मैंने देखा कि उनके पास एक्शनबार के लिए पहले से ही अंतर्निहित समर्थन है (एक्शनबार्कट क्लास कहा जाता है)।

मैंने ActionBarSherlock और ActionBar संगतता के बीच दृश्य अंतर दिखाने के लिए दो सरल अनुप्रयोगों का निर्माण किया। तुलनात्मक चित्र देखें:

संगतता पुस्तकालय का उपयोग कर ऐप

अनुप्रयोग शर्लक पुस्तकालय का उपयोग कर

अब मेनू बटन दबाने पर उपस्थिति:

मेनू दबाया पर संगतता का उपयोग कर ऐप

एप्लिकेशन मेनू दबाया पर शर्लक का उपयोग कर


जैसा कि आप देख सकते हैं, छवियां केवल वही लागू करती हैं जो कहा गया था। एक्शन बार कम्पेटिबिलिटी आपको एक्शन बार केवल तब देती है जब आप जिस डिवाइस पर चल रहे हैं वह एपीआई स्तर 3.0 या उससे ऊपर है। जबकि शरलॉक अधिक सामान्य है।

नीचे आप एप्लिकेशन स्रोत देख सकते हैं।

मेनू xml फ़ाइल समान है:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_1"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:title="@string/action1"/>

<item
    android:id="@+id/action_2"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action2"/>

<item
    android:id="@+id/action_3"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action3"/>

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>

</menu>

संगतता की गतिविधि:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }

     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
     }
}

शर्लक की गतिविधि:

public class MainActivity extends SherlockActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

}

शर्लक एप्लिकेशन पर एक अतिरिक्त कॉन्फ़िगरेशन आवश्यक था:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">

अद्यतन: जैसा कि @ rudy-s ने कहा, नवीनतम एंड्रॉइड सपोर्ट लाइब्रेरी (एपीआई 18) के साथ, मैंने देखा कि उनके पास एक्शनबार के लिए पहले से ही अंतर्निहित समर्थन है (एक्शनबार्कट क्लास कहा जाता है)।


5
दरअसल, यह पूरी तरह सही नहीं है। कम्पैटिज़ लाइब्रेरी आपको जिंजरब्रेड पर एक्शनबेर कार्यान्वयन दे सकती है। उदाहरण के लिए यह ऐप आपको GB पर एक AB देता है और शर्लक लेकिन कम्पेटिबल का उपयोग नहीं करता है। play.google.com/store/apps/details?id=uk.co.mxdata.rootle
हामिद

कोई ज़रूरत नहीं है, यदि आप उस एक्शनबारकोम्पैट नमूने को बाहर खींचते हैं (उदाहरण के लिए एंड्रॉइड -17 एसडीके से बाहर) और इसे एडीटी में बनाएँ, तो यह एक्शनबार के साथ जीबी डिवाइस पर चलेगा। मैंने अभी इसका परीक्षण खुद करने के लिए 2.3.5 के साथ एक इच्छा HD पर पुष्टि करने के लिए किया है।
हामिद

ठीक है मैंने समझ लिया। हालाँकि, ActionBarSherlock अधिक सुविधाएँ प्रदान करता है, है ना?
ब्रूनो माटुस

2
नवीनतम एंड्रॉइड सपोर्ट लाइब्रेरी (एपीआई 18) के साथ, मैंने देखा कि उनके पास एक्शनबार के लिए पहले से ही अंतर्निहित समर्थन है (एक्शनबर्पाट क्लास कहा जाता है)।
रूडी एस जूल 25'13

GingerBEARD? इसे प्यार करना।
कार्लोस पी

39

एक्शनबार शरलॉक सरल एक्शनबार संगतता परियोजना की तुलना में कहीं अधिक उन्नत और अधिक महत्वाकांक्षी है।

एक्शन बार संगतता को "नमूना" या एक अच्छा प्रारंभिक बिंदु माना जा सकता है यदि आप केवल अपने ऐप के शीर्ष पर एक्शन बार को स्मैक करना चाहते हैं।

ActionBarSherlock संगतता लायब्रेरी पर बनाता है, और आपको (एक्शन बार संगतता नमूना की तरह) प्री-3.0 उपकरणों पर एक एक्शन बार देता है। इसके अतिरिक्त इसमें एक्शनबेर कम्पेटिबल कोड में अतिरिक्त सुविधाएँ मौजूद नहीं हैं। इसमें जैसी सुविधाएँ शामिल हैं, लेकिन सीमित नहीं हैं

  • setNavigationMode (ऐक्शन बार में टैब और स्पिनर के लिए)
  • संवाद खुशबू
  • प्रासंगिक एक्शन बार (सीएबी) एक मेनू जो एक्शन बार पर ले जाता है, उदाहरण के लिए मल्टी सेलेक्ट के लिए उपयोग किया जाता है (http://developer.android.com/design/patterns/new-4-0.html) यह एक ICS फीचर है ( !) इसके लिए एक्शनमोड क्लास (एपीआई स्तर 11 में शुरू) का कार्यान्वयन एक्शनबारशायर लाइब्रेरी में पेश किया जाना था।
  • विखंडन और FragmentActivity कार्यान्वयन - क्योंकि टुकड़े onCreateOptions मेनू को लागू कर सकते हैं, हमें यह सुनिश्चित करने की आवश्यकता है कि SupportMenuInflater का उपयोग किया जाता है।
  • Holo.Dark और Holo.Light (Theme.Sherlock, Theme.Sherlock.Light) के विपरीत दो विषय नहीं
  • आईसीएस सुविधा "स्प्लिट एक्शन बार"

ActionbarSherlock का उपयोग करने में केवल एक ही नकारात्मक पहलू यह है कि आप खुद को उस लाइब्रेरी में बंद कर लेते हैं। यदि किसी कारण से निकट भविष्य में यह मर जाएगा, तो आपको इसे स्वयं बनाए रखना होगा (उदाहरण के लिए यदि कोई जेलीबीन कार्यान्वयन नहीं आता है)। यह एक परेशानी है (एक बड़ी समस्या नहीं) क्योंकि आपके सभी टुकड़े शर्लकफ्रेमगेम और आपकी सभी गतिविधियों का विस्तार करते हैं। SherlockActivity।


क्या मैं कुछ भूल रहा हूँ? ऐसा लगता है कि बहु का चयन ABS में समर्थन नहीं है
jiduvah

1
विलंब के लिए क्षमा चाहते हैं। मल्टी सेलेक्ट खुद ABS द्वारा समर्थित नहीं है। लेकिन, आप ABS "ActionMode" का उपयोग करके Multiselect को लागू कर सकते हैं, क्योंकि ABS में ActionMode कक्षाओं का अपना कार्यान्वयन है। जब "बहु चयन मोड" में जा रहा है, आप CHOICE_MODE_MULTIPLE को ListView की पसंद मोड सेट होता है, और getSherlockActivity () startActionMode (कॉलबैक) पर कॉल करके ActionMode आह्वान।
ग्लेन Bech

26

खैर @ जेक कार्यान्वयन आगे की ओर जाता है, एक्शनबार कॉम्पिटिटर, अधिक सटीक एक्शनबार कम्पेटिबल होने के लिए सिर्फ एक बुनियादी उदाहरण है कि आप हनीकॉम्ब (एपीआई 13) से पहले रिलीज के लिए एक छद्म एक्शनबार के साथ सभी आवेदन का समर्थन कैसे कर सकते हैं। यद्यपि उनका लक्ष्य एक ही क्रॉस संगत एक्शनबार है, उनके पास अलग-अलग दृष्टिकोण हैं।

ActionbarCompat Aproach

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

सबसे दिलचस्प हिस्सा ActionbarBaseHelper में है , क्योंकि इसमें सबसे महत्वपूर्ण कोड है, मेरा सुझाव है कि आप इस वर्ग को समझें और आपको पूरा उदाहरण मिलेगा।

एक्शन बार शर्लक

खैर यह मुश्किल है, क्योंकि मैं लेखक नहीं हूं, शायद जेक इसे आगे समझा सकता है, लेकिन मैं इसे आजमाऊंगा।

जिस तरह कंप्लीट करने वाले शर्लक अलग-अलग तरह से इंप्लीमेंट करते हैं लेकिन एक "कम्पेटिबल" के लिए है और दूसरा नेटिव है। यह आपको शेरलाक्टिविटी या शेरलाफ्रैगमेंटएक्टिविटी से बाहर निकालने के लिए मजबूर करता है, क्योंकि यह दो आधार वर्गों में एक्शनबार भेजने की विधि है।

यह एक बड़ी और जटिल परियोजना है, जिसे एक ही पोस्ट में नहीं समझाया जा सकता है। सुझाव है कि आप शर्लक गिथब रेपो के चारों ओर खुदाई करें, जैसा कि जेफ एटवुड कहते हैं

यहां छवि विवरण दर्ज करें


10
  • मेरा दृढ़ता से मानना ​​है कि आपको ActionBarCompatउन सभी नई परियोजनाओं के लिए उपयोग करना चाहिए जो पुराने उपकरणों का समर्थन करना चाहते हैं।

  • यह मौजूदा परियोजनाओं को स्थानांतरित करने के लिए भी समझ में आ सकता है। तो यह जानने के लिए पढ़ें कि आपको क्यों माइग्रेट करना चाहिए या तुरंत ActionBarCompat का उपयोग करना चाहिए और मौजूदा परियोजनाओं को कैसे स्थानांतरित करना चाहिए।

आपको ActionBarSherlock पर ActionBarCompat क्यों पसंद करना चाहिए?

ActionbarSherlock पर ActionbarCompat को प्राथमिकता देने के कई कारण हैं।

  1. सबसे पहले यह परियोजना Google द्वारा है, समर्थन लाइब्रेरी का हिस्सा है और इस प्रकार संभवतः नए एक्शन बार संबंधित सामान का समर्थन करेगा उसी समय Google स्टॉक एंड्रॉइड के साथ उन्हें जारी करता है।

  2. एक और अच्छा कारण यह है कि यह Navigation Drawer patternबॉक्स के सही बाहर का समर्थन करता है , जबकि ActionBarSherlock नहीं करता है। इस प्रकार यदि आप किसी मौजूदा प्रोजेक्ट / ऐप में इस दराज को जोड़ना चाहते हैं तो आपको माइग्रेट करना चाहिए।

  3. अंतिम और महत्वपूर्ण यह है कि ActionBarSherlock के निर्माता, जेक व्हार्टन ने Google+ पर घोषणा की कि ActionBarSherlock के आगे विकास को रोक दिया गया है। ActionBarSherlock 4.4 अंतिम रिलीज़ है और इसे बग फिक्स मिल सकता है - लेकिन इसमें कोई नई सुविधाएँ नहीं होंगी: इसलिए यदि नई कार्यक्षमता को एक्शनबार में शामिल किया गया है, तो आप इसे एक्शनबर्स्लॉक के साथ नहीं रख सकते हैं।


7

हो सकता है कि हम इस सवाल का जवाब क्योंकि Actionbar समर्थन आधिकारिक प्रकाशित Google के बाद से अद्यतन करना चाहिए API18 ?

नीचे ब्लॉक इन दो पुस्तकालयों के बारे में आधिकारिक ब्लॉग से है :

यदि आप तृतीय-पक्ष समाधान (जैसे ActionBarSherlock) का उपयोग कर रहे हैं, तो उन्नयन पर विचार करने के लिए कुछ कारण हैं:

  • अपडेट किया जा सकता है क्योंकि एक्शन बार एपीआई विकसित होता है।
  • एकीकृत पैतृक नेविगेशन समर्थन।
  • फ्रेमवर्क मेनू और MenuItem कक्षाओं का उपयोग।
  • समर्थन लाइब्रेरी के फ़्रैगमेंट वर्ग का उपयोग करना जारी रखें।
  • ActionBarDrawerToggle के लिए ड्रॉयरलैटआउट के साथ एकीकृत समर्थन।
  • पॉपअपमेनू का बैकपोर्ट।

ActionBarSherlock एक ठोस और अच्छी तरह से जांच की गई लाइब्रेरी है, जिसने लंबे समय तक डेवलपर्स को अच्छी तरह से सेवा दी है। यदि आप पहले से ही इसका उपयोग कर रहे हैं और वर्तमान में उपरोक्त में से किसी की आवश्यकता नहीं है, तो माइग्रेट करने की कोई आवश्यकता नहीं है।

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