Android सामग्री डिजाइन डॉक्स से बॉटम शीट कैसे लागू करें


79

आप नीचे की शीट की अटकलों को कैसे लागू करते हैं? http://www.google.com/design/spec/compenders/bottom-sheets.html

Google ड्राइव का नया अपडेट फ़्लोटिंग एक्शन बटन प्रेस -> के साथ दिखाता है

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

दी गई ऐनक कभी भी गोल कोनों के बारे में कुछ भी नहीं कहती है, भले ही यह करना संभव है, बस अनिश्चित है कि इसके बारे में कैसे जाना जाए। वर्तमान में AppCompat पुस्तकालय और लक्ष्य 21 का उपयोग कर।

धन्यवाद


लिंक टूट गया है। नई लिंक सामग्री
रे ली

जवाबों:


66

संपादित करें

BottomSheetअब का हिस्सा है android-support-libraryजॉन शेल्लेस का जवाब देखें ।


दुर्भाग्य से वर्तमान में ऐसा करने का कोई "आधिकारिक" तरीका नहीं है (कम से कम कोई भी जो मुझे पता नहीं है)।
सौभाग्य से "बॉटमशीट" (क्लिक) नामक एक पुस्तकालय है जो BottomSheetएंड्रॉइड 2.1 और ऊपर के समर्थन को देखने और महसूस करने की नकल करता है।

ड्राइव ऐप के मामले में, यहां इस लाइब्रेरी के साथ कोड कैसा दिखेगा:

    new BottomSheet.Builder(this, R.style.BottomSheet_Dialog)
            .title("New")
            .grid() // <-- important part
            .sheet(R.menu.menu_bottom_sheet)
            .listener(new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO
        }
    }).show();

menu_bottom_sheet (मूल रूप से एक मानक /res/menu/*.xml संसाधन)

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/folder"
        android:title="Folder"
        android:icon="@drawable/ic_action_folder" />
    <item
        android:id="@+id/upload"
        android:title="Upload"
        android:icon="@drawable/ic_action_file_upload" />
    <item
        android:id="@+id/scan"
        android:title="Scan"
        android:icon="@drawable/ic_action_camera_alt" />
</menu>

आउटपुट इस तरह दिखता है:

नीचे की शीट की तस्वीर

जो, मुझे लगता है, मूल के बहुत करीब आता है। यदि आप उन रंगों से खुश नहीं हैं जिन्हें आप इसे अनुकूलित कर सकते हैं - इसे देखें (क्लिक करें)


बूम यह वही है जो मैं देख रहा हूँ! मैं इसे आज रात दे दूँगा!
जॉन शेली

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

1
@ ठीक है मूल रूप से आपको बस सभी अनुप्रयोगों की सूची प्राप्त करने की आवश्यकता है जो इरादे को संभाल सकते हैं ( उदाहरण के लिए इस स्टैको-प्रश्न देखें ) और उन्हें एडेप्टर में जोड़ें जो कि बॉटमशीट को "फीड" करता है। आप उस परिवाद के आधिकारिक नमूने को भी देख सकते हैं, जो वास्तव में आप अनुरोध कर रहे हैं। ( क्लिक करें - लाइन 153 - 179 )।
लिखें

काम किया, धन्यवाद @reVerse! मैंने getShareActionsसभी संभव साझाकरण विकल्प प्राप्त करने के लिए विधि में कोड का पुन: उपयोग करना समाप्त कर दिया । Btw, .limit(R.integer.num_share_actions)बिल्डर पर कॉल करने के लिए भी उपयोगी है जब तक कि आप पूरी स्क्रीन को कवर करने के लिए शीट नहीं चाहते हैं
Cat

1
@ जॉनसनली यह सब ठीक है, बिल्कुल। मैं भी "आधिकारिक समाधान" के लिए जाने की सलाह दूंगा, हालांकि यह वास्तव में सीमित है लेकिन कम से कम Google ने नींव रखी, आखिरकार। ;)
22

65

मेरे स्वयं के प्रश्न का उत्तर देते हुए, डेवलपर्स को पता है कि नया समर्थन पुस्तकालय इसे अंत में प्रदान करता है! सभी शक्तिशाली Google की जय हो!

Android डेवलपर के ब्लॉग से एक उदाहरण :

// The View with the BottomSheetBehavior
View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);  
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);  
behavior.setBottomSheetCallback(new BottomSheetCallback() {  
   @Override  
   public void onStateChanged(@NonNull View bottomSheet, int newState) {  
     // React to state change  
   }  

  @Override  
  public void onSlide(@NonNull View bottomSheet, float slideOffset) {  
     // React to dragging events  
  }  
});

@ ऊपर दिए गए उत्तर का उत्तर अभी भी एक वैध विकल्प है लेकिन यह जानकर अच्छा लगता है कि एक मानक है जो Google भी समर्थन करता है।


पोस्ट करने का शुक्रिया। मुझे लगता है कि यह "सही" उत्तर होना चाहिए अब :)
सिरका

@androiddeveloper किया। अब एक समर्थन विशिष्ट बात पर विचार करते हुए, मुझे लगता है कि उपयोगकर्ताओं को उन उदाहरणों की तलाश में बेहतर भाग्य मिलेगा। जब मैंने सवाल पूछा मूल रूप से यह समर्थन परिवाद में प्रदान नहीं किया गया था। यदि प्रश्न "सपोर्ट लाइब्रेरी बॉटम शीट व्यू को कैसे लागू किया जाए" तो मैंने और भी गहराई से उत्तर दिया होगा :)
जॉन शेली

@JohnShelley क्या आपको कुछ XML सामान का भी उपयोग करने की आवश्यकता नहीं है? क्या रैप-कंटेंट दृश्य के लिए नीचे की शीट की झलक / ध्वस्त (या इसके बारे में जो भी इसके बारे में तब कहा जाता है) को सेट करना संभव है, और जब इसका विस्तार होता है, तो पूर्ण स्क्रीन होने के लिए?
Android डेवलपर

4
मुझे लगता है कि बहुत से लोग सोच रहे हैं कि Google नए समर्थन एपीआई का उपयोग कैसे करें, और विपुल शाह के पास एक महान YouTube लिंक है जो आपको यह समझने में मदद कर सकता है कि इसका उपयोग कैसे करें, कृपया stackoverflow.com/a/35731959/1053037
मिन ट्रूंग

सवाल यह है: नीचे शीट मेनू को कैसे लागू किया जाए। ऊपर के उदाहरण में मेनू आइटम कहाँ हैं ??????? तुम्हें पता है, मेनू आइटम है कि आप क्लिक करें ...
ekashking

8

ब्लॉग पोस्ट के बाद: http://android-developers.blogspot.com/2016/02/android-support-library-232.html

मेरा एक्सएमएल इस तरह से समाप्त हो गया:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coordinator_layout"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <LinearLayout
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
        <ImageView
            android:src="@android:drawable/ic_input_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

और मेरे टुकड़े के onCreateView में:

    coordinatorLayout = (CoordinatorLayout)v.findViewById(R.id.coordinator_layout);
    View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
    BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
    behavior.setPeekHeight(100);
    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            // React to state change
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            // React to dragging events
        }
    });

सेटपेकहाइट का डिफ़ॉल्ट 0 है, इसलिए यदि आप इसे सेट नहीं करते हैं, तो आप अपना दृश्य नहीं देख पाएंगे।


हाँ, xml बिल्कुल उसी तरह है जैसे मेरा टुकड़ा दिखता था। क्या यह आपके लिए काम नहीं कर रहा है?
मकोरादो

डिफ़ॉल्ट
झूले की

1
यदि आप एंड्रॉइड एक्स का उपयोग पैकेज के नाम परिवर्तन को ध्यान में रखते हैं:com.google.android.material.bottomsheet.BottomSheetBehavior
अल्टिमो_एम

मेनू आइटम कहाँ हैं ????????????????? (नीचे की शीट मेनू का पूरा बिंदु)
ईकेकिंग

7

अब आप BottomSheetBehaviorAndroid समर्थन लाइब्रेरी 23.2 से आधिकारिक एपीआई का उपयोग कर सकते हैं ।

नीचे नमूना कोड स्निपेट है

bottomSheetBehavior = BottomSheetBehavior.from(findViewById(R.id.bottomSheet));

case R.id.expandBottomSheetButton:
 bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
 break;
case R.id.collapseBottomSheetButton:
 bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
 break;
case R.id.hideBottomSheetButton:
 bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
 break;
case R.id.showBottomSheetDialogButton:
 new MyBottomSheetDialogFragment().show(getSupportFragmentManager(), "sample");

कृपया इस पर समझ पाने के लिए एंड्रॉइड बॉटमशीट यूट्यूब ट्यूटोरियल देखें ।


हाय विपुल, लिंक के लिए धन्यवाद। हालांकि मैंरे पास भी एक सवाल है। क्या नीचे की शीट के लिए लंगर बिंदु सेट करना संभव है?
कोराक्सिस

बहुत बढ़िया youtube लिंक क्या आपका कहीं सार्वजनिक रेपो में स्रोत कोड है?
जॉन शेली

महान एक, आपने मेरा दिन बचाया, मुझे लगता है कि इसे स्वीकार कर लिया जाना चाहिए
फैसलअहमद

5

मैं एक सीधे कोनों के साथ जाऊंगा क्योंकि यह दिशानिर्देशों में है। कार्यान्वयन के लिए - शायद इस परियोजना से विचार का उपयोग करना सबसे अच्छा है: https://github.com/umano/AndroidSlidingUpPanel

मुझे लगता है कि आप इसका उपयोग कर सकते हैं जैसा कि यह है या कार्यान्वयन के लिए विचार करें। इसी तरह के स्लाइडिंग पैनल को कैसे लागू किया जाए, इस बारे में एक और बढ़िया लेख यहां पाया जा सकता है: http://blog.neteril.org/blog/2013/10/10/framelayout-your-best-ui-friend/


5

यहाँ कुछ अन्य विकल्प दिए गए हैं:

  • वहाँ से एक ही उपलब्ध है Flipboard , तथापि embedding गतिविधि काम करने के लिए bottomsheet के लिए संशोधित किया जाना चाहिए।
  • टट्टी -च की बॉटलशीट : यह एंड्रॉइड रेपो की रेजोल्वरएक्टिविटी से निकाला गया है और लॉन्चिंग गतिविधि को संशोधित करने की आवश्यकता नहीं है।

0

Google ने हाल ही में एंड्रॉइड सपोर्ट लाइब्रेरी 23.2 जारी की जो आधिकारिक तौर पर एंड्रॉइड डिज़ाइन सपोर्ट लाइब्रेरी के लिए नीचे की शीट लाता है ।


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