5

मैं केवल एपीआई 21 का उपयोग करके एक नया ऐप बनाना चाहता हूं।AppCompat के बिना फ़्लोटिंग एक्शन बटन कैसे जोड़ें?

सामग्री डिज़ाइन का पालन करने के लिए, मैं एक एफएबी का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे अब किसी का उपयोग करने के बारे में कोई अच्छी जानकारी नहीं मिल रही है डिजाइन लाइब्रेरी में शामिल

अब तक, मैं पुस्तकालय build.gradle फ़ाइल को शामिल किया है, और मेरे विचार (नीचे दिए गए कोड)

<android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:src="@android:drawable/ic_menu_add" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentEnd="true" 
     app:elevation="5dp" 
     app:borderWidth="0dp" 
     app:fabSize="mini"/> 

(यह एक RelativeLayout में है)

जब मैं करने के लिए एक फैब जोड़ा एप्लिकेशन लॉन्च, मैं मिलता है:

android.view.InflateException: बाइनरी एक्सएमएल फ़ाइल लाइन # 15: त्रुटि चढ़ा वर्ग android.support.design.widget.FloatingActionButton

मुझे SO पर एक जवाब मिला जो कहता है कि मुझे एक AppCompat विषय का उपयोग करने की आवश्यकता है, लेकिन मैं केवल शुद्ध सामग्री/API21 सामान का उपयोग करना चाहता हूं।

मैं AppCompat (समर्थन पुस्तकालयों) के बिना एक एफएबी का उपयोग कैसे कर सकता हूं?

+0

मुझे लगता है कि तुम सच में कई timesavers और महान एपीआई CoordinatorLayout, Snackbar, NavigationView, TabLayout तरह के पर बाहर याद आती है ... और इतने पर। सभी "शुद्ध सामग्री सामग्री" कितनी सुंदर है। किसी भी तरह, API21 + पर अपना फ़्लोटिंगएक्शन बटन बनाना बहुत आसान है। आप [एंड्रॉइड-टोपेका] में googles कार्यान्वयन पर एक नज़र डाल सकते हैं (https://github.com/googlesamples/android-topeka/blob/master/app/src/main/java/com/google/samples/apps/topeka /widget/fab/FloatingActionButton.java)। –

उत्तर

6

एफएबी नई डिजाइन कंपैट लाइब्रेरी में बनाया गया है - जो एपीआई 7 के रूप में उपकरणों पर काम करेगा। आपको इसे इस्तेमाल करने की निर्भरता के रूप में शामिल करने की आवश्यकता होगी (और ऐसा करने में संकोच नहीं करना चाहिए)।

यदि आप लाइब्रेरी (या कोई बाहरी कोड) का उपयोग करने से बचना चाहते हैं तो आपको एफएबी को स्वयं खींचने की आवश्यकता होगी (एक आकार ड्रायरेबल का उपयोग करके)।

डिज़ाइन कंपैट लिब का उपयोग करके नीचे की रेखा, एफएबी का समर्थन करने के लिए पसंदीदा तरीका है, और आपको इसका उपयोग करना चाहिए। डिजाइन कंपैट लिब "शुद्ध/सामग्री API21 सामान" है।

किसी भी एपीआई के लिए लागू एक एफएबी कार्यान्वयन नहीं है, फिर डिज़ाइन समर्थन lib में से एक। आपको lib को शामिल करना होगा, या पूरी तरह से कोड को लागू करना होगा।

डिज़ाइन lib की AppCompat पर निर्भरता है, इसलिए यदि आप मूल फैब का उपयोग करने की योजना बना रहे हैं, तो आपको AppCompat के लिए निर्भरता भी शामिल करने की आवश्यकता होगी।

से official blog post: "। ध्यान दें कि के रूप में डिजाइन पुस्तकालय समर्थन v4 और AppCompat समर्थन लाइब्रेरी पर निर्भर करता है, उन अपने आप डिजाइन पुस्तकालय निर्भरता को जोड़ने शामिल किया जाएगा"

+0

मुझे लगता है कि कुछ पार तार हैं। मुझे पता है कि मुझे डिजाइन सपोर्ट लाइब्रेरी का उपयोग करने की ज़रूरत है, मैं इसके बारे में नहीं हूं। मैं कह रहा हूं कि ऐसा लगता है कि मुझे v7 AppCompat सामान का उपयोग करना है, जिसे मैं नहीं चाहता हूं। –

+0

इसे उत्तर में मिला - नीचे की रेखा, AppCompat पर निर्भरता है, इसलिए आपको इसका उपयोग करना होगा। – Booger

-1

वहाँ भी कई लोकप्रिय है गिटहब पर पुस्तकालय जैसे:

FloatingActionButton जो कई क्रियाओं को प्रकट करने के लिए मेनू के रूप में विस्तार/पतन कर सकता है।

+1

मैं व्यक्तिगत रूप से अभी तीसरे पक्ष के lib का उपयोग नहीं करता - और डिजाइन लिब में शामिल "मूल" कार्यान्वयन के साथ चिपक जाता हूं। मानकों के साथ रहना महत्वपूर्ण है (और मानक "डिजाइन लिब कार्यान्वित" एफएबी आपको निकटतम प्राप्त करेगा)। मुझे पता है कि इसमें कई विशेषताएं (विस्तारशीलता सहित) नहीं हो सकती है, लेकिन फिर भी लगता है कि उभरते मानकों के आसपास डिजाइन और कार्यान्वित करना महत्वपूर्ण है। – Booger

-1

मैं कहूंगा कि यद्यपि आप अपना ऐप केवल एपीआई 21 पर उपलब्ध कराने का इरादा रखते हैं, लेकिन मैं आपको एंड्रॉइड सपोर्ट लाइब्रेरी AppCompat-v7 का उपयोग करके अपने एप्लिकेशन को लागू करने के लिए प्रोत्साहित करता हूं। आपको बहुत सारे लाभ मिलेगा।

वैसे भी यह आपकी पसंद है। बस मेरा सुझाव। लेकिन अगर आप आश्वस्त हैं। या Android डिज़ाइन समर्थन लाइब्रेरी का उपयोग करने के तरीके के बारे में इस पूर्ण ट्यूटोरियल को देखें।http://inthecheesefactory.com/blog/android-design-support-library-codelab/en

आशा इस मदद

+0

v7 लाइब्रेरी का उपयोग करने से क्या लाभ हैं?साथ ही, ऐसा लगता है कि मैं केवल डिज़ाइन सपोर्ट लाइब्रेरी का उपयोग करके मूल FAB का उपयोग कर सकता हूं जो AppCompat विषय का उपयोग करने के लिए है:/ –

1

सामग्री डिज़ाइन पुस्तकालय AppCompat के साथ एक निर्भरता है। @ बूगर उत्तर की जांच करें। यह आधिकारिक ब्लॉग की रिपोर्ट करता है।

एफएबी का उपयोग कैसे करें।

अपने build.gradle निर्भरता जोड़ें:

compile 'com.android.support:design:22.2.0' 

बस अपने डिजाइन करने के लिए फैब जोड़ें:

<android.support.design.widget.FloatingActionButton 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:src="@drawable/ic_add" 
      android:layout_marginBottom="@dimen/fab_margin_bottom" 
      android:layout_marginRight="@dimen/fab_margin_right" 
      app:elevation="6dp" 
      app:borderWidth="0dp" 
      app:fabSize="normal" /> 

इस समय वहाँ कुछ कीड़े हैं।

आपको API21 + के साथ छाया प्रदर्शित करने के लिए app:borderWidth="0dp" परिभाषित करना होगा।

इसके अलावा आपको एपीआई 21+ और पुराने उपकरणों के लिए अलग-अलग मार्जिन परिभाषित करना होगा।

res/values ​​/ dimens.xml

<dimen name="fab_margin_right">0dp</dimen> 
<dimen name="fab_margin_bottom">0dp</dimen> 

res/values-V21/dimens.xml

<dimen name="fab_margin_right">16dp</dimen> 
<dimen name="fab_margin_bottom">16dp</dimen> 

फैब उच्चारण रंग का उपयोग करता है और आप app:backgroundTint विशेषता के साथ रद्द कर सकते थे ।

fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //do something 
    } 
}); 
-1

असल में मैं एक ही समस्या हो रही थी:

अंत में आप के साथ एक ClickListener सेट कर सकते हैं। समाधान काफी सरल था: आपको app:rippleColor="@color/colorPrimary" परिभाषित करना होगा और आप एपकोम्पेट थीम्स और क्रियाकलापों का उपयोग किए बिना एक एफएबी का उपयोग कर सकते हैं। बेशक आपको compile 'com.android.support:support-v4:25.3.1' और compile 'com.android.support:design:25.3.1' शामिल करना होगा, लेकिन आपको AppCompatActivity और उन थीम्स का उपयोग करने की आवश्यकता नहीं है।

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/action_add_palette" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="16dp" 
    android:src="@android:drawable/ic_input_add" 
    app:rippleColor="@color/colorPrimary" /> 
+0

यह काम नहीं करता है –

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