Klasa DropHelper
upraszcza ten proces.
wdrożenia funkcji „przeciągnij i upuść”. Członek jetpacka
Biblioteka DragAndDrop
, DropHelper
zapewnia zgodność wsteczną do poziomu interfejsu API 24.
Użyj DropHelper
, aby określić cele pomijania, dostosować wyróżnienie elementu docelowego
i określić sposób postępowania z porzuconymi danymi.
Ustaw źródło przeciągania
Na początek utwórz DragStartHelper
z przeciąganiem widoku źródła
OnDragStartListener
W OnDragStartListener
metody zastępowania onDragStart()
. Tworzenie obiektu ClipData
i ClipData.Item
dla przenoszonych danych. W ramach ClipData
,
dostarczania metadanych przechowywanych w obiekcie ClipDescription
w
ClipData
W przypadku operacji „przeciągnij i upuść”, która nie odzwierciedla przenoszenia danych,
możesz użyć obiektu null
zamiast rzeczywistego obiektu.
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); } });
Określ wartości docelowe pomijania
Gdy użytkownik zwolni cień na widok, trzeba skonfigurować ten widok akceptacja tych danych i właściwe udzielenie odpowiedzi.
DropHelper.configureView()
to statyczna, przeciążona metoda, która umożliwia To
obejmują następujące parametry:
- Bieżąca
Activity
– używana do Identyfikator URI uprawnienia. - Opcje konfiguracji dla lokalizacji docelowej, w szczególności listy
umieszczonych pól
EditText
. OnReceiveContentListener
z usuniętymi danymi.
Aby na przykład utworzyć grupę docelową, która akceptuje obrazy, użyj jednej z następujące wywołania metod:
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);
W drugim wywołaniu pomijane są opcje konfiguracji miejsca docelowego pomijania. W takim przypadku
kolor wyróżnienia w miejscu docelowym jest ustawiony na dodatkowy (lub uzupełniający) kolor motywu,
promień narożnika wyróżnienia jest ustawiony na 16 dp, a lista EditText
Komponenty są puste. Więcej informacji znajdziesz w następnej sekcji.
Skonfiguruj cele pomijania
DropHelper.Options
wewnętrzna klasa umożliwia skonfigurowanie celów pomijania danych. Podaj instancję klasy do:
DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener
)
. Więcej informacji znajdziesz w poprzedniej sekcji.
Dostosuj wyróżnienie miejsca docelowego
DropHelper
konfiguruje elementy docelowe tak, aby były wyświetlane podświetlenie podczas przeciągania przez użytkownika
nad treścią docelową. DropHelper
udostępnia styl domyślny,
DropHelper.Options
pozwala ustawić kolor zaznaczenia i określić
promień narożnika prostokąta zaznaczenia.
Użyj
DropHelper.Options.Builder
do utworzenia instancji DropHelper.Options
i ustawienia opcji konfiguracyjnych,
jak w tym przykładzie:
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();
Obsługa komponentów EditText w elementach docelowych
DropHelper
kontroluje też fokus w obrębie elementu docelowego, gdy cel zawiera:
edytowalne pola tekstowe.
Celami pomijania mogą być pojedynczy widok lub hierarchia widoków. Jeśli
hierarchia zawiera co najmniej jeden element typu EditText
należy podać listę komponentów, które mają
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
, by zapewnić prawidłowe działanie wyróżniania elementów docelowych i obsługi danych tekstowych.
DropHelper
uniemożliwia EditText
komponentów w widoku danych docelowych
przed odciąganiem uwagi od widoku, który zawiera, podczas interakcji z przeciąganiem.
Oprócz tego, jeśli funkcja przeciągnij i upuść ClipData
zawiera tekst i dane URI, DropHelper
wybiera jedną z opcji EditText
w obszarze docelowym do obsługi danych tekstowych. Wybór zależy od
w tej kolejności:
- Pole
EditText
, w którym odrzucono wartośćClipData
. - Element
EditText
zawierający kursor tekstowy (daszek). - Pierwsze
EditText
przesłane do wywołaniaDropHelper.Options.Builder.addInnerEditTexts(EditText...)
Aby ustawić EditText
jako domyślny moduł obsługi danych tekstowych, przekaż EditText
jako
pierwszy argument wywołania do
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
Na przykład, jeśli
element docelowy obsługuje obrazy, ale zawiera edytowalne pola tekstowe T1
, T2
,
i T3
, ustaw T2
jako domyślną w ten sposób:
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();
Obsługuj dane w elementach docelowych
Metoda DropHelper.configureView()
akceptuje OnReceiveContentListener
utworzonego na potrzeby przeciągania i upuszczania ClipData
. Dane „przeciągnij i upuść”
jest przekazywana detektorowi w
ContentInfoCompat
.
Obiekt zawiera dane tekstowe. Multimedia, takie jak obrazy, są reprezentowane przez
Identyfikatory URI.
OnReceiveContentListener
obsługuje też dane przekazywane do miejsca docelowego przez
interakcje użytkowników inne niż przeciąganie i upuszczanie, na przykład kopiowanie i
wklej – gdy DropHelper.configureView()
jest używany do skonfigurowania
typy wyświetleń:
- Wszystkie widoki, jeśli użytkownik ma Androida w wersji 12 lub nowszej.
AppCompatEditText
jeśli użytkownik ma Androida w wersji starszej niż 7.0.
Typy MIME, uprawnienia i weryfikacja treści
Sprawdzanie typu MIME przez DropHelper
odbywa się metodą „przeciągnij i upuść”
ClipDescription
, czyli
utworzone przez aplikację udostępniającą dane metodą „przeciągnij i upuść”. Zweryfikuj parametr
ClipDescription
, aby upewnić się, że typy MIME są prawidłowo skonfigurowane.
DropHelper
prosi o wszystkie uprawnienia dostępu do identyfikatorów URI treści zawartych w
przeciągnij i upuść ClipData
. Więcej informacji:
DragAndDropPermissions
pozwalają na obsługę identyfikatorów URI treści podczas przetwarzania
i skalowalnych danych.
DropHelper
nie weryfikuje danych zwracanych przez dostawców treści, gdy:
rozpoznawania identyfikatorów URI z usuniętych danych. Sprawdź wartość null i zweryfikuj poprawność
wszystkich rozwiązanych danych.