يتيح لك إطار عمل السحب والإفلات في Android إضافة إمكانات السحب والإفلات التفاعلية إلى تطبيقك. باستخدام السحب والإفلات، يمكن للمستخدمين نسخ أو نقل النص والصور والعناصر وأي محتوى يمكن تمثيله بمعرّف الموارد المنتظم (URI)، من View إلى آخر داخل أحد التطبيقات، أو بين التطبيقات في وضع النوافذ المتعددة.
الشكل 1. السحب والإفلات داخل أحد التطبيقات
الشكل 2. السحب والإفلات بين التطبيقات
يتضمن إطار العمل فئة حدث السحب، ومستمعين السحب، وفئات
وطرق المساعدة. على الرغم من أنّه مصمَّم في الأساس لتفعيل نقل البيانات، يمكنك استخدام إطار العمل لإجراءات أخرى على واجهة المستخدم. على سبيل المثال، يمكنك إنشاء تطبيق يمزج بين
الألوان عندما يسحب المستخدم أيقونة لون فوق أيقونة أخرى. ومع ذلك، تصف بقية المستند إطار عمل السحب والإفلات في سياق نقل البيانات.
نظرة عامة
هناك بعض العناصر المتضمنة في عملية السحب.
سحب المصدر: عرض نقطة البداية لعملية السحب والإفلات.
هدف الإفلات: عرض يمكنه قبول سحب البيانات.
ظل السحب:
ظل السحب هو تمثيل للبيانات التي يتم سحبها، ويكون مرئيًا للمستخدمين.
سحب الأحداث:
عندما يحرّك المستخدم ظل السحب على تنسيق التطبيق، يرسل النظام أحداث السحب إلى أدوات معالجة أحداث السحب وطرق معاودة الاتصال المرتبطة بكائنات View في التنسيق.
تبدأ عملية السحب والإفلات عندما يقوم المستخدم بعمل إيماءة واجهة مستخدم يتعرف عليها تطبيقك كإشارة لبدء سحب البيانات. وعند الاستجابة، يرسل التطبيق إشعارًا إلى النظام يفيد ببدء عملية السحب والإفلات. يتصل النظام مرة أخرى بتطبيقك لإظهار ظل السحب، ويعرضه للمستخدمين أثناء عملية السحب والإفلات.
وعندما يحرّك المستخدم ظل السحب على تنسيق التطبيق، يرسل النظام أحداث السحب إلى أدوات معالجة الأحداث وطرق معاودة الاتصال المرتبطة بكائنات View في التنسيق. إذا قام المستخدم بتحرير ظل السحب فوق
هدف الإفلات، يرسل النظام البيانات إليه. تنتهي عملية السحب والإفلات عندما يحرر المستخدم ظل السحب، سواء كان ظل السحب فوق هدف الإفلات أم لا.
سحب النماذج وإفلاتها التي تحتوي على طرق مختلفة لتنفيذ السحب والإفلات إلى جانب قبول الوسائط التفاعلية المتقدّمة.
يخضع كل من المحتوى وعيّنات التعليمات البرمجية في هذه الصفحة للتراخيص الموضحّة في ترخيص استخدام المحتوى. إنّ Java وOpenJDK هما علامتان تجاريتان مسجَّلتان لشركة Oracle و/أو الشركات التابعة لها.
تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-07-26 (حسب التوقيت العالمي المتفَّق عليه)"],[],[],null,["# Enable drag and drop\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to use drag and drop in Compose. \n[Drag and drop →](/develop/ui/compose/touch-input/user-interactions/drag-and-drop) \n\n\u003cbr /\u003e\n\n| **Note:** See the improved method of implementing drag and drop in [Receive rich\n| content](/develop/ui/views/receive-rich-content) for a better UX and improved maintainability of your code.\n\nThe Android drag-and-drop framework lets you add interactive drag-and-drop\ncapabilities to your app. With drag and drop, users can copy or move text,\nimages, objects, and any content that can be represented by a URI, from one\n[`View`](/reference/android/view/View) to another within an app, or between apps\nin [multi-window mode](/develop/ui/views/touch-and-input/drag-drop/multi-window#DragPermissionsMultiWindow).\n\n|--------------------------------------------|-------------------------------------------|\n| | |\n| **Figure 1.** Drag and drop within an app. | **Figure 2.** Drag and drop between apps. |\n\nThe framework includes a drag event class, drag listeners, and helper classes\nand methods. Although primarily designed to enable the transfer of data, you can\nuse the framework for other UI actions. For example, you can create an app that\nmixes colors when the user drags a color icon over another icon. However, the\nrest of document describes the drag-and-drop framework in the context of data\ntransfer.\n\nOverview\n--------\n\nThere are a few elements involved in the drag process.\n\n1. Drag source: The start point view of drag-and-drop process.\n\n2. Drop target: A view that can accept the drag data.\n\n3. [Drag shadow](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragShadowBuilder):\n A *drag shadow* is a representation\n of the data being dragged, it's visible to users.\n\n4. [Drag events](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragEvent):\n As the user moves the drag shadow over the\n app's layout, the system sends drag events to the drag event listeners and\n callback methods associated with the `View` objects in the layout.\n\nA drag-and-drop operation starts when the user makes a UI gesture that your app\nrecognizes as a signal to start dragging data. In\nresponse, the app notifies the system that a drag-and-drop operation is\nstarting. The system calls back to your\napp to get a *drag shadow*. and show it to users during drag-and-drop process.\n\nAs the user moves the drag shadow over the app's layout, the system sends drag\nevents to the [drag event listeners and callback methods](/develop/ui/views/touch-and-input/drag-drop/concepts#AboutDragListeners)\nassociated with the `View` objects in the layout. If the user releases the drag\nshadow over a drop target, the system sends the data to it. The drag-and-drop\noperation ends when the user releases the drag shadow, whether or not the drag\nshadow is over a drop target.\n\nTopics\n------\n\n[Key Concepts](/develop/ui/views/touch-and-input/drag-drop/concepts)\n: Understand the drag-and-drop process.\n\n[DropHelper for simplified drag and drop](/develop/ui/views/touch-and-input/drag-drop/drophelper)\n: Learn how to implement drag and drop with `DropHelper`.\n\n[Implement drag and drop with views](/develop/ui/views/touch-and-input/drag-drop/view)\n: Alternatively, implement drag and drop with Android views, this allows\n developers to have more control of the details.\n\n[Drag and drop in multi-window mode](/develop/ui/views/touch-and-input/drag-drop/multi-window)\n: Support drag and drop in multi-window mode, allow objects to move across\n different applications.\n\nAdditional resources\n--------------------\n\n- [Codelab for Drag and Drop](/codelabs/codelab-dnd-views) using views\n- [Drag \\& drop for seamless multitasking](https://www.youtube.com/watch?v=WOm76wSfkbU) video\n- [Drag and Drop Samples](https://github.com/android/platform-samples/tree/main/samples/user-interface/draganddrop) which contains various ways to implement drag and drop along with accepting rich media."]]