সহজভাবে টেনে নিয়ে রাখার জন্য DropHelper

DropHelper ক্লাস টেনে নিয়ে রাখুন ক্ষমতার প্রয়োগকে সহজ করে। Jetpack DragAndDrop লাইব্রেরির মেম্বার, DropHelper API লেভেল ২৪ পর্যন্ত ব্যাকওয়ার্ড কম্প্যাটিবিলিটি প্রদান করে।

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

টেনে আনার সোর্স সেট করুন

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

OnDragStartListener-এ, onDragStart() ওভাররাইড পদ্ধতি। যে ডেটা সরানো হচ্ছে তার জন্য একটি ClipData অবজেক্ট এবং ClipData.Item অবজেক্ট তৈরি করুন। ClipData-এর অংশ হিসেবে, ClipData-এর মধ্যে ClipDescription অবজেক্টে সেভ করা মেটাডেটা প্রদান করুন। ডেটা মুভমেন্ট দেখায় না এমন টেনে নিয়ে রাখুন অপারেশনের জন্য, আপনি হয়ত আসল অবজেক্টের পরিবর্তে 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()

জাভা

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

  • বর্তমান Activity—যা URI অনুমতির জন্য ব্যবহার করা হয়।
    • একটি View যা ড্রপ টার্গেট হিসেবে কাজ করে।
      • ড্রপ টার্গেট, ড্রপ করা ডেটা থেকে যে MIME-এর প্রকার গ্রহণ করতে পারে।
  • ড্রপ টার্গেটের জন্য কনফিগারেশন বিকল্প—বিশেষ করে, এম্বেড করা EditText ফিল্ড-এর তালিকা।
  • ড্রপ করা ডেটা ম্যানেজ করার জন্য একটি OnReceiveContentListener।

যেমন, ছবি গ্রহণ করে এমন ড্রপ টার্গেট তৈরি করতে, নিম্নলিখিত মেথড কলের যেকোনও একটি ব্যবহার করুন:

Kotlin

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

দ্বিতীয় কলে ড্রপ টার্গেট কনফিগারেশন বিকল্প বাদ দেওয়া হয়, যেক্ষেত্রে ড্রপ টার্গেট হাইলাইট কালার থিমের সেকেন্ডারি (বা অ্যাকসেন্ট) কালারে সেট করা হয়, হাইলাইট কর্নার রেডিয়াস ১৬ ডিপি-তে সেট করা হয় এবং EditText কম্পোনেন্টের তালিকা খালি থাকে। বিস্তারিত জানতে নিম্নলিখিত বিভাগটি দেখুন।

ড্রপ টার্গেট কনফিগার করুন

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

ড্রপ টার্গেট হাইলাইট করা কাস্টমাইজ করুন

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

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

Kotlin

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 বিকল্পে টেক্সট ও URI ডেটা থাকলে, 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-কে ডিফল্ট হিসেবে সেট করুন:

Kotlin

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 অবজেক্টে লিসনারকে প্রদান করা হয়। অবজেক্টে টেক্সট ডেটা আছে। ছবি সহ অন্যান্য মিডিয়া URI-এর মাধ্যমে দেখানো হয়।

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

  • ব্যবহারকারী Android 12 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করলে, সব ভিউ।
  • AppCompatEditText, ব্যবহারকারী Android 7.0-এর আগের কোনও ভার্সন ব্যবহার করলে।

MIME-এর ধরন, অনুমতি ও কন্টেন্ট যাচাইকরণ

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

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

ড্রপ করা ডেটাতে URI সমাধান করার সময় কন্টেন্ট প্রোভাইডারের পাঠানো ডেটা DropHelper যাচাই করে না। নাল চেক করুন এবং সমাধান করা ডেটা সঠিক কিনা তা যাচাই করুন।