Mit der Klasse DropHelper
wird
die Implementierung von Drag-and-drop-Funktionen. Ein Mitglied des Jetpacks
DragAndDrop
-Bibliothek, DropHelper
bietet Abwärtskompatibilität bis hin zum API-Level 24.
Verwenden Sie DropHelper
, um Drop-Ziele anzugeben, das Hervorheben von Drop-Zielen anzupassen,
und definieren, wie mit gelöschten Daten umgegangen wird.
Drag-Quelle festlegen
Erstellen Sie zuerst DragStartHelper
Quellansicht ziehen und
OnDragStartListener
In OnDragStartListener
:
Überschreibungsmethode onDragStart()
. ClipData
-Objekt erstellen
und ClipData.Item
für die zu verschiebenden Daten. Im Rahmen der ClipData
Metadaten bereitstellen, die in einem ClipDescription
-Objekt innerhalb der
ClipData
Bei einem Drag-and-drop-Vorgang,
der keine Datenbewegung darstellt,
sollten Sie anstelle eines tatsächlichen Objekts null
verwenden.
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); } });
Drop-Ziele angeben
Wenn ein Nutzer einen Schlagschatten über einer Ansicht loslässt, muss die Ansicht konfiguriert werden um die Daten zu akzeptieren und korrekt zu antworten.
DropHelper.configureView()
ist eine statische, überladene Methode, mit der Sie Drop-Ziele angeben können. Das
-Parameter umfassen Folgendes:
- Die aktuelle
Activity
– verwendet für URI Berechtigungen.- Ein
View
, das als Drop-Ziel dient.- MIME-Typen das Drop-Ziel die verworfenen Daten akzeptieren kann.
- Ein
- Konfigurationsoptionen für das Drop-Ziel, insbesondere eine Liste von
eingebetteten
EditText
-Feldern. - Ein
OnReceiveContentListener
um verworfene Daten zu verarbeiten.
Um beispielsweise ein Drop-Ziel zu erstellen, das Bilder akzeptiert, verwenden Sie eines der Methodenaufrufe verwenden:
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);
Beim zweiten Aufruf werden die Konfigurationsoptionen für das
Drop-Ziel weggelassen. In diesem Fall
Zielhervorhebungsfarbe wird auf die sekundäre (oder Akzentfarbe) des Designs festgelegt,
der Eckenradius der Hervorhebung auf 16 dp festgelegt ist und die Liste der EditText
ist leer. Weitere Informationen finden Sie im folgenden Abschnitt.
Drop-Ziele konfigurieren
Die DropHelper.Options
Mit der inneren Klasse können Sie Drop-Ziele konfigurieren. Geben Sie eine Instanz der Klasse an,
DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener
)
. Weitere Informationen finden Sie im vorherigen Abschnitt.
Hervorhebung von Drop-Zielen anpassen
DropHelper
konfiguriert Drop-Ziele so, dass beim Ziehen der Nutzer eine Markierung angezeigt wird
die Inhalte über den Zielen liegt. DropHelper
bietet einen Standardstil und
Mit DropHelper.Options
können Sie die Farbe der Markierung festlegen
Eckenradius des Rechtecks der Markierung.
Verwenden Sie die Methode
DropHelper.Options.Builder
um eine DropHelper.Options
-Instanz zu erstellen und
Konfigurationsoptionen festzulegen.
Dies wird im folgenden Beispiel gezeigt:
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();
EditText-Komponenten in Drop-Zielen verarbeiten
DropHelper
steuert auch den Fokus innerhalb des Drop-Ziels, wenn das Ziel enthält
Textfelder bearbeiten können.
Drop-Ziele können eine einzelne Ansicht oder eine Ansichtshierarchie sein. Wenn die Zielansicht
Hierarchie enthält mindestens ein EditText
Komponenten, geben Sie eine Liste der Komponenten an,
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
um sicherzustellen, dass das Hervorheben von Drop-Zielen
und die Verarbeitung von Textdaten korrekt funktionieren.
DropHelper
verhindert, dass EditText
-Komponenten in der Ansicht für das abgelegte Ziel entfernt werden.
Hierarchie, den Fokus bei Interaktionen per Drag-and-drop nicht aus der übergeordneten Ansicht zu entfernen.
Wenn die Drag-and-drop-Funktion ClipData
Text- und URI-Daten enthält, wählt DropHelper
eine der EditText
aus.
Komponenten im Drop-Ziel zur Verarbeitung der Textdaten verwendet werden. Die Auswahl basiert auf der
in folgender Reihenfolge:
- Die
EditText
, auf der dasClipData
gelöscht wird. - Die
EditText
, die den Textcursor (Caret-Zeichen) enthält. - Die erste
EditText
, die für den Aufruf von bereitgestellt wirdDropHelper.Options.Builder.addInnerEditTexts(EditText...)
.
Um ein EditText
als Standard-Textdaten-Handler festzulegen, übergeben Sie das EditText
als
das erste Argument des Aufrufs
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
. Wenn beispielsweise
Das Ablageziel verarbeitet Bilder, enthält aber bearbeitbare Textfelder T1
, T2
,
und T3
, legen Sie T2
so als Standard fest:
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();
Daten in Drop-Zielen verarbeiten
Die Methode DropHelper.configureView()
akzeptiert OnReceiveContentListener
.
die Sie für die Drag-and-drop-Funktion ClipData
erstellen. Die Drag-and-drop-Daten
wird dem Listener in einer
ContentInfoCompat
-Objekt.
Im Objekt sind Textdaten vorhanden. Medien wie Bilder werden durch
URIs.
OnReceiveContentListener
verarbeitet auch Daten, die dem Drop-Ziel zur Verfügung gestellt werden,
Nutzerinteraktionen, die über Drag-and-drop hinausgehen, wie
einfügen: Wenn mit DropHelper.configureView()
Folgendes konfiguriert wird:
Arten von Ansichten:
- Alle Ansichten, wenn der Nutzer Android 12 oder höher verwendet.
AppCompatEditText
, Der Nutzer verwendet eine Android-Version bis Android 7.0.
MIME-Typen, Berechtigungen und Inhaltsvalidierung
Die MIME-Typ-Überprüfung durch DropHelper
basiert auf Drag-and-drop
ClipDescription
:
die von der App mit den Drag-and-drop-Daten erstellt wurden. Validieren Sie die
ClipDescription
, um sicherzugehen, dass die MIME-Typen korrekt festgelegt sind.
DropHelper
fordert alle Zugriffsberechtigungen für Inhalts-URIs an, die in der
ClipData
per Drag-and-drop hinzufügen. Weitere Informationen finden Sie unter
DragAndDropPermissions
Die
Mit Berechtigungen können Sie die Inhalts-URIs beim Verarbeiten von Drag-and-drop-
Daten.
DropHelper
validiert die von Contentanbietern zurückgegebenen Daten nicht, wenn
die URIs in den verworfenen Daten auflösen. Prüfen Sie auf null und verifizieren Sie die Richtigkeit von
aufgelösten Daten.