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
OnReceiveContentListenerum 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 dasClipDatagelö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.