आसानी से खींचने और छोड़ने की सुविधा के लिए ड्रॉपडाउन

DropHelper क्लास, इस्तेमाल करना आसान बनाती है खींचने और छोड़ने की सुविधाओं को लागू करना. Jetpack का सदस्य DragAndDrop लाइब्रेरी, DropHelper इससे एपीआई लेवल 24 तक के पुराने सिस्टम के साथ काम करने की सुविधा मिलती है.

ड्रॉप टारगेट तय करने, ड्रॉप टारगेट को हाइलाइट करने की सुविधा को पसंद के मुताबिक बनाने के लिए DropHelper का इस्तेमाल करें, और यह तय करें कि छूटे हुए डेटा को कैसे मैनेज किया जाए.

ड्रैग सोर्स सेट करें

शुरू करने के लिए, DragStartHelper बनाएं सोर्स व्यू को खींचें और छोड़ें और OnDragStartListener.

OnDragStartListener में, तरीका onDragStart() बदलें. ClipData ऑब्जेक्ट बनाएं और ClipData.Item ऑब्जेक्ट को ट्रांसफ़र किया जा सकता है. ClipData के हिस्से के तौर पर, वह मेटाडेटा दें जिसे ClipDescription ऑब्जेक्ट में ClipData. डेटा की हलचल को न दिखाने वाले खींचें और छोड़ें कार्रवाई के लिए, तो शायद आप किसी असल ऑब्जेक्ट के बजाय null का इस्तेमाल करना चाहें.

Kotlin

DragStartHelper(draggableView)
    { view: View, _: DragStartHelper ->
        val item = ClipData.Item(view.tag as? CharSequence)
        val dragData = ClipData(
            view.tag as? CharSequence,
            arrayOf(ClipDescription.MIMETYPE_TEXT_PLAIN),
            item
        )
        view.startDragAndDrop(
            dragData,
            View.DragShadowBuilder(view),
            null,
            0
        )
    }.attach()

Java

new DragStartHelper(draggableView, new DragStartHelper.OnDragStartListener() {
    @Override
    public void onDragStart(View view, DragStartHelper helper) {
        CharSequence tag = (CharSequence) view.getTag();
        ClipData.Item item = new ClipData.Item(tag);
        ClipData dragData = new ClipData(
          tag, new String[]{ClipDescription.MIMETYPE_TEXT_PLAIN}, item);
        view.startDragAndDrop(
          dragData, new View.DragShadowBuilder(view), null, 0);
    }
});

ड्रॉप टारगेट तय करें

जब कोई उपयोगकर्ता किसी व्यू पर ड्रॉप शैडो रिलीज़ करता है, तो व्यू को कॉन्फ़िगर करना ज़रूरी है और सही ढंग से प्रतिक्रिया दें.

DropHelper.configureView() एक स्टैटिक, ओवरलोडेड तरीका है, जिसकी मदद से ड्रॉप टारगेट तय किए जा सकते हैं. यह पैरामीटर में ये शामिल होते हैं:

उदाहरण के लिए, इमेज स्वीकार करने वाला ड्रॉप टारगेट बनाने के लिए, इनमें से किसी एक का इस्तेमाल करें कॉल:

Kotlin

configureView(
    myActivity,
    targetView,
    arrayOf("image/*"),
    options,
    onReceiveContentListener)

// or

configureView(
    myActivity,
    targetView,
    arrayOf("image/*"),
    onReceiveContentListener)

Java

DropHelper.configureView(
    myActivity,
    targetView,
    new String[] {"image/*"},
    options,
    onReceiveContentlistener);

// or

DropHelper.configureView(
    myActivity,
    targetView,
    new String[] {"image/*"},
    onReceiveContentlistener);

दूसरे कॉल में, ड्रॉप टारगेट के कॉन्फ़िगरेशन के विकल्पों को छोड़ दिया जाता है. इस स्थिति में, ड्रॉप टारगेट हाइलाइट करने के लिए रंग को थीम के सेकंडरी (या एक्सेंट) रंग पर सेट किया गया है, हाइलाइट कोने का दायरा 16 dp पर सेट किया गया है, और EditText की सूची कॉम्पोनेंट खाली है. ज़्यादा जानकारी के लिए, यहां मौजूद सेक्शन देखें.

ड्रॉप टारगेट कॉन्फ़िगर करें

DropHelper.Options इनर क्लास की मदद से, ड्रॉप टारगेट कॉन्फ़िगर किए जा सकते हैं. क्लास का कोई इंस्टेंस इसको दें DropHelper.configureView(Activity, View, String[], Options, OnReceiveContentListener) तरीका. ज़्यादा जानकारी के लिए, पिछला सेक्शन देखें.

ड्रॉप टारगेट को हाइलाइट करने की सुविधा को पसंद के मुताबिक बनाएं

DropHelper, ड्रॉप टारगेट को कॉन्फ़िगर करता है, ताकि उपयोगकर्ताओं को खींचकर छोड़ने के दौरान हाइलाइट दिखाया जा सके कॉन्टेंट को टारगेट किया जा सकता है. DropHelper डिफ़ॉल्ट स्टाइलिंग देता है और DropHelper.Options की मदद से, हाइलाइट का रंग सेट किया जा सकता है और हाइलाइट के आयत के कोने की रेडियस.

इसका इस्तेमाल करें DropHelper.Options.Builder क्लास का इस्तेमाल करके, DropHelper.Options इंस्टेंस बनाएं और कॉन्फ़िगरेशन विकल्प सेट करें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है:

Kotlin

val options: DropHelper.Options = DropHelper.Options.Builder()
                                      .setHighlightColor(getColor(R.color.purple_300))
                                      .setHighlightCornerRadiusPx(resources.getDimensionPixelSize(R.dimen.drop_target_corner_radius))
                                      .build()

Java

DropHelper.Options options = new DropHelper.Options.Builder()
                                     .setHighlightColor(getColor(R.color.purple_300))
                                     .setHighlightCornerRadiusPx(getResources().getDimensionPixelSize(R.dimen.drop_target_corner_radius))
                                     .build();

ड्रॉप टारगेट में एडिट टेक्स्ट कॉम्पोनेंट मैनेज करना

DropHelper, ड्रॉप टारगेट में फ़ोकस को तब भी कंट्रोल करता है, जब टारगेट में ये शामिल हों बदलाव करने लायक टेक्स्ट फ़ील्ड.

ड्रॉप टारगेट कोई व्यू या व्यू हैरारकी हो सकते हैं. अगर टारगेट व्यू में गिरावट आई है, तो क्रम में एक या उससे ज़्यादा EditText हैं बनाने के लिए, कॉम्पोनेंट की सूची दें, DropHelper.Options.Builder.addInnerEditTexts(EditText...) ताकि यह पक्का किया जा सके कि ड्रॉप टारगेट को हाइलाइट करने और टेक्स्ट डेटा को मैनेज करने की प्रोसेस सही तरीके से काम करे.

DropHelper, ड्रॉप टारगेट व्यू में EditText कॉम्पोनेंट को रोकता है को ड्रैग इंटरैक्शन के दौरान कंटेनिंग व्यू से फ़ोकस चुराने से रोका गया हो.

साथ ही, अगर खींचें और छोड़ें ClipData इसमें टेक्स्ट और यूआरआई डेटा शामिल होता है, तो DropHelper EditText में से किसी एक को चुनता है कॉम्पोनेंट को 'ड्रॉप टारगेट' में शामिल करता है, ताकि टेक्स्ट डेटा को हैंडल किया जा सके. चुनाव इन आधार पर किया जाता है: प्राथमिकता के क्रम के हिसाब से:

  1. वह EditText जिस पर ClipData छोड़ा गया.
  2. वह EditText जिसमें टेक्स्ट कर्सर (कैरेट) होता है.
  3. इस नंबर पर कॉल के लिए दिया गया पहला EditText DropHelper.Options.Builder.addInnerEditTexts(EditText...).

EditText को डिफ़ॉल्ट टेक्स्ट डेटा हैंडलर के तौर पर सेट करने के लिए, EditText को इस तरह पास करें कॉल का पहला आर्ग्युमेंट DropHelper.Options.Builder.addInnerEditTexts(EditText...). उदाहरण के लिए, अगर आपका ड्रॉप टारगेट इमेज को हैंडल करता है, लेकिन इसमें बदलाव किए जा सकने वाले टेक्स्ट फ़ील्ड T1, T2, और T3 के साथ, T2 को इस तरह से डिफ़ॉल्ट बनाएं:

Kotlin

val options: DropHelper.Options = DropHelper.Options.Builder()
                                      .addInnerEditTexts(T2, T1, T3)
                                      .build()

Java

DropHelper.Options options = new DropHelper.Options.Builder()
                                     .addInnerEditTexts(T2, T1, T3)
                                     .build();

गिरावट वाले टारगेट में डेटा मैनेज करना

DropHelper.configureView() वाले तरीके में OnReceiveContentListener को स्वीकार किया जाता है इसे, 'खींचें और छोड़ें' ClipData को हैंडल करने के लिए बनाया जाता है. 'खींचें और छोड़ें' डेटा को सुनने के लिए ContentInfoCompat ऑब्जेक्ट. ऑब्जेक्ट में टेक्स्ट डेटा मौजूद होता है. इमेज जैसे मीडिया को यूआरआई.

OnReceiveContentListener, गिरावट टारगेट को दिए गए डेटा को इसके हिसाब से भी मैनेज करता है खींचें और छोड़ें के अलावा अन्य उपयोगकर्ता इंटरैक्शन—जैसे कॉपी और चिपकाएं—जब DropHelper.configureView() का इस्तेमाल करके, इन्हें कॉन्फ़िगर किया जाता है व्यू के टाइप:

  • सभी व्यू, जब उपयोगकर्ता Android 12 या इसके बाद के वर्शन का इस्तेमाल कर रहा हो.
  • AppCompatEditText अगर उपयोगकर्ता Android के किसी वर्शन को Android 7.0 पर चला रहा है.

MIME टाइप, अनुमतियां, और कॉन्टेंट की पुष्टि

DropHelper, MIME टाइप के लिए जो जांच करता है वह खींचे और छोड़ें ClipDescription, यानी कि और 'खींचें और छोड़ें' डेटा उपलब्ध कराने वाले ऐप्लिकेशन से बनाया गया है. पुष्टि करें ClipDescription. इससे यह पक्का किया जा सकता है कि MIME टाइप सही तरीके से सेट किया गया है.

DropHelper, इसमें मौजूद कॉन्टेंट यूआरआई के लिए सभी ऐक्सेस अनुमतियों का अनुरोध करता है इसके लिए, ClipData को खींचें और छोड़ें. ज़्यादा जानकारी के लिए, यह देखें DragAndDropPermissions. कॉन्टेंट बनाने अनुमतियों से, खींचें और छोड़ें बटन को प्रोसेस करते समय आपको कॉन्टेंट यूआरआई का समाधान करने में मदद मिलती है डेटा शामिल है.

DropHelper, कॉन्टेंट देने वालों से मिले डेटा की पुष्टि नहीं करता, जब छोड़े गए डेटा में यूआरआई का समाधान करता है. शून्य की जाँच करें और इसके सही होने की पुष्टि करें कोई भी समाधान किया गया डेटा.