সরলীকৃত ড্র্যাগ এবং ড্রপের জন্য DropHelper

DropHelper ক্লাস ড্র্যাগ-এন্ড-ড্রপ ক্ষমতার বাস্তবায়নকে সহজ করে। Jetpack DragAndDrop লাইব্রেরির একজন সদস্য, DropHelper API স্তর 24-এ পশ্চাদগামী সামঞ্জস্য প্রদান করে।

ড্রপ টার্গেট নির্দিষ্ট করতে, ড্রপ টার্গেট হাইলাইটিং কাস্টমাইজ করতে এবং ড্রপ করা ডেটা কীভাবে পরিচালনা করা হয় তা নির্ধারণ করতে DropHelper ব্যবহার করুন।

ড্র্যাগ সোর্স সেট করুন

শুরু করতে, ড্র্যাগ সোর্স ভিউ এবং OnDragStartListener দিয়ে DragStartHelper তৈরি করুন।

OnDragStartListener এ, onDragStart() উপর ওভাররাইড পদ্ধতি। সরানো ডেটার জন্য একটি ClipData অবজেক্ট এবং ClipData.Item অবজেক্ট তৈরি করুন। ClipData এর অংশ হিসেবে, ClipData মধ্যে একটি ClipDescription অবজেক্টে সংরক্ষিত মেটাডেটা সরবরাহ করুন। একটি ড্র্যাগ-এন্ড-ড্রপ অপারেশনের জন্য যা ডেটা আন্দোলনের প্রতিনিধিত্ব করে না, আপনি একটি প্রকৃত বস্তুর পরিবর্তে null ব্যবহার করতে চাইতে পারেন।

কোটলিন

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()

জাভা

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() একটি স্ট্যাটিক, ওভারলোডেড পদ্ধতি যা আপনাকে ড্রপ লক্ষ্য নির্দিষ্ট করতে দেয়। এর পরামিতিগুলির মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

উদাহরণস্বরূপ, একটি ড্রপ টার্গেট তৈরি করতে যা চিত্রগুলি গ্রহণ করে, নিম্নলিখিত পদ্ধতির কলগুলির যে কোনও একটি ব্যবহার করুন:

কোটলিন

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

// or

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

জাভা

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

// or

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

দ্বিতীয় কল ড্রপ টার্গেট কনফিগারেশন বিকল্পগুলিকে বাদ দেয়, যে ক্ষেত্রে ড্রপ টার্গেট হাইলাইট রঙটি থিমের সেকেন্ডারি (বা অ্যাকসেন্ট) রঙে সেট করা হয়, হাইলাইট কোণার ব্যাসার্ধটি 16 ডিপিতে সেট করা হয় এবং EditText উপাদানগুলির তালিকা খালি থাকে। বিস্তারিত জানার জন্য নিম্নলিখিত বিভাগ দেখুন.

ড্রপ লক্ষ্যগুলি কনফিগার করুন

DropHelper.Options অভ্যন্তরীণ ক্লাস আপনাকে ড্রপ লক্ষ্যগুলি কনফিগার করতে দেয়। DropHelper.configureView(Activity, View, String[], Options, OnReceiveContentListener ) পদ্ধতিতে ক্লাসের একটি উদাহরণ প্রদান করুন। আরও তথ্যের জন্য পূর্ববর্তী বিভাগ দেখুন.

ড্রপ লক্ষ্য হাইলাইটিং কাস্টমাইজ করুন

DropHelper ড্রপ টার্গেট কনফিগার করে একটি হাইলাইট প্রদর্শন করার জন্য যখন ব্যবহারকারীরা টার্গেটের উপর বিষয়বস্তু টেনে আনে। DropHelper ডিফল্ট স্টাইলিং প্রদান করে, এবং DropHelper.Options আপনাকে হাইলাইটের রঙ সেট করতে এবং হাইলাইটের আয়তক্ষেত্রের কোণার ব্যাসার্ধ নির্দিষ্ট করতে দেয়।

DropHelper.Options.Builder ক্লাস ব্যবহার করুন একটি DropHelper.Options উদাহরণ তৈরি করতে এবং কনফিগারেশন বিকল্পগুলি সেট করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

কোটলিন

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

জাভা

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

ড্রপ টার্গেটে EditText উপাদানগুলি পরিচালনা করুন

DropHelper ড্রপ টার্গেটের মধ্যে ফোকাস নিয়ন্ত্রণ করে যখন লক্ষ্যে সম্পাদনাযোগ্য পাঠ্য ক্ষেত্র থাকে।

ড্রপ টার্গেট একটি একক দৃশ্য বা একটি দৃশ্য শ্রেণিবিন্যাস হতে পারে। ড্রপ টার্গেট ভিউ হায়ারার্কিতে এক বা একাধিক EditText উপাদান থাকলে, DropHelper.Options.Builder.addInnerEditTexts(EditText...) ড্রপ টার্গেট হাইলাইটিং এবং টেক্সট ডেটা হ্যান্ডলিং সঠিকভাবে কাজ করে কিনা তা নিশ্চিত করতে উপাদানগুলির একটি তালিকা প্রদান করুন।

DropHelper ড্রপ টার্গেট ভিউ হায়ারার্কির মধ্যে থাকা EditText উপাদানগুলিকে ড্র্যাগ ইন্টারঅ্যাকশনের সময় ধারণকৃত ভিউ থেকে ফোকাস চুরি করতে বাধা দেয়।

এছাড়াও, যদি ড্র্যাগ-এন্ড-ড্রপ ClipData টেক্সট এবং ইউআরআই ডেটা অন্তর্ভুক্ত করে, DropHelper টেক্সট ডেটা পরিচালনা করতে ড্রপ টার্গেটে EditText উপাদানগুলির মধ্যে একটি নির্বাচন করে। নির্বাচন অগ্রাধিকার নিম্নলিখিত ক্রম উপর ভিত্তি করে:

  1. EditText যার উপর ClipData ড্রপ করা হয়েছে।
  2. EditText যেটিতে টেক্সট কার্সার রয়েছে (ক্যারেট)।
  3. DropHelper.Options.Builder.addInnerEditTexts(EditText...) কল করার জন্য প্রথম EditText দেওয়া হয়েছে।

ডিফল্ট টেক্সট ডেটা হ্যান্ডলার হিসাবে একটি EditText সেট করতে, DropHelper.Options.Builder.addInnerEditTexts(EditText...) এ কলের প্রথম আর্গুমেন্ট হিসাবে EditText পাস করুন। উদাহরণস্বরূপ, যদি আপনার ড্রপ টার্গেট ছবিগুলি পরিচালনা করে কিন্তু সম্পাদনাযোগ্য পাঠ্য ক্ষেত্রগুলি T1 , T2 , এবং T3 ধারণ করে, তাহলে T2 নিম্নরূপ ডিফল্ট করুন:

কোটলিন

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

জাভা

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

ড্রপ লক্ষ্যে ডেটা পরিচালনা করুন

DropHelper.configureView() পদ্ধতিটি একটি OnReceiveContentListener গ্রহণ করে যা আপনি ড্র্যাগ-এন্ড-ড্রপ ClipData পরিচালনা করতে তৈরি করেন। একটি ContentInfoCompat অবজেক্টে শ্রোতাকে ড্র্যাগ-এন্ড-ড্রপ ডেটা সরবরাহ করা হয়। টেক্সট ডেটা অবজেক্টে থাকে। মিডিয়া, যেমন ছবি, ইউআরআই দ্বারা প্রতিনিধিত্ব করা হয়।

OnReceiveContentListener এছাড়াও ড্র্যাগ এবং ড্রপ ব্যতীত ব্যবহারকারীর ইন্টারঅ্যাকশন দ্বারা ড্রপ টার্গেটে দেওয়া ডেটা পরিচালনা করে—যেমন কপি এবং পেস্ট—যখন DropHelper.configureView() নিম্নলিখিত ধরনের ভিউ কনফিগার করতে ব্যবহার করা হয়:

  • সমস্ত ভিউ, যদি ব্যবহারকারী Android 12 বা উচ্চতর সংস্করণ চালায়।
  • AppCompatEditText , যদি ব্যবহারকারী Android 7.0 পর্যন্ত Android এর একটি সংস্করণ চালান।

MIME প্রকার, অনুমতি, এবং বিষয়বস্তু যাচাইকরণ

DropHelper দ্বারা MIME টাইপ চেকিং ড্র্যাগ-এন্ড-ড্রপ ClipDescription উপর ভিত্তি করে তৈরি করা হয়েছে, যা ড্র্যাগ-এন্ড-ড্রপ ডেটা প্রদানকারী অ্যাপ দ্বারা তৈরি করা হয়েছে। MIME প্রকারগুলি সঠিকভাবে সেট করা হয়েছে তা নিশ্চিত করতে ClipDescription যাচাই করুন।

DropHelper ড্র্যাগ-এন্ড-ড্রপ ClipData থাকা কন্টেন্ট URI-এর জন্য সমস্ত অ্যাক্সেসের অনুমতির অনুরোধ করে। আরও তথ্যের জন্য, DragAndDropPermissions দেখুন। ড্র্যাগ-এন্ড-ড্রপ ডেটা প্রক্রিয়া করার সময় অনুমতিগুলি আপনাকে সামগ্রীর URI-গুলি সমাধান করতে দেয়।

DropHelper ড্রপ করা ডেটাতে ইউআরআইগুলি সমাধান করার সময় বিষয়বস্তু প্রদানকারীদের দ্বারা প্রত্যাবর্তিত ডেটা যাচাই করে না। শূন্যের জন্য পরীক্ষা করুন এবং কোনো সমাধান করা ডেটার সঠিকতা যাচাই করুন।