La classe DropHelper
simplifie
la mise en œuvre de fonctions
de glisser-déposer. Un membre du Jetpack
Bibliothèque DragAndDrop
, DropHelper
et assure la rétrocompatibilité jusqu'au niveau d'API 24.
Utilisez DropHelper
pour spécifier des cibles de dépôt, personnaliser la mise en surbrillance des cibles de dépôt,
et définir la façon dont les données supprimées sont traitées.
Définir la source du déplacement
Pour commencer, créez DragStartHelper
faites glisser la vue source et
OnDragStartListener
Dans OnDragStartListener
,
méthode de remplacement onDragStart()
. Créer un objet ClipData
et ClipData.Item
pour les données déplacées. Dans le cadre du ClipData
,
fournissent des métadonnées stockées dans un objet ClipDescription
au sein de
ClipData
Pour une opération de glisser-déposer qui ne
représente pas le déplacement des données,
vous pouvez utiliser null
au lieu d'un objet réel.
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); } });
Spécifier des cibles de dépôt
Lorsqu'un utilisateur libère une ombre projetée sur une vue, celle-ci doit être configurée correctement pour accepter les données et répondre correctement.
DropHelper.configureView()
est une méthode statique et surchargée qui vous permet de spécifier des cibles de dépôt. Son
sont les suivants:
- La
Activity
actuelle, utilisée pour URI autorisations.View
qui sert de cible de dépôt.- Types MIME que la cible de dépôt peut accepter à partir des données supprimées.
- Les options de configuration de la cible de dépôt, en particulier une liste
champs
EditText
intégrés. - Un
OnReceiveContentListener
pour traiter les données perdues.
Par exemple, pour créer une cible de dépôt qui accepte les images, utilisez l'une des les appels de méthode suivants:
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);
Le deuxième appel omet les options de configuration de la cible de dépôt, auquel cas le
la couleur de mise en surbrillance de la cible de dépôt est définie sur la couleur secondaire (ou d'accentuation) du thème ;
le rayon de l'angle mis en surbrillance est défini sur 16 dp, et la liste de EditText
est vide. Pour en savoir plus, consultez la section suivante.
Configurer les cibles de dépôt
DropHelper.Options
interne vous permet de configurer
des cibles de dépôt. Fournissez une instance de la classe à
le DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener
)
. Pour en savoir plus, consultez la section précédente.
Personnaliser la mise en surbrillance de la cible de dépôt
DropHelper
configure les cibles de dépôt pour qu'elles s'affichent en surbrillance pendant que les utilisateurs font glisser
le contenu sur les cibles. DropHelper
fournit un style par défaut ; et
DropHelper.Options
vous permet de définir la couleur de la mise en surbrillance et de spécifier la
et l'arrondi d'angle du rectangle de la mise en surbrillance.
Utilisez les
DropHelper.Options.Builder
pour créer une instance DropHelper.Options
et définir les options de configuration,
comme illustré dans l'exemple suivant:
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();
Gérer les composants EditText dans les cibles de dépôt
DropHelper
contrôle également le focus dans la cible de dépôt lorsque celle-ci contient
des champs de texte modifiables.
Les cibles de dépôt peuvent être une vue unique ou une hiérarchie de vues. Si la vue cible de la suppression
la hiérarchie contient une ou plusieurs EditText
des composants, fournissez une liste des composants
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
pour s'assurer que la mise en surbrillance de la cible de dépôt et la gestion des données textuelles fonctionnent correctement.
DropHelper
empêche les composants EditText
dans la vue de la cible de dépôt
de la vue parent au cours des interactions de déplacement.
De plus, si la fonction glisser-déposer ClipData
inclut du texte et des données d'URI, DropHelper
sélectionne l'une des EditText
dans la cible de dépôt pour traiter les données textuelles. La sélection est basée sur
ordre de priorité suivant:
EditText
sur lequel leClipData
est abandonné.EditText
contenant le curseur de texte (signe d'insertion).- Le premier
EditText
fourni à l'appel deDropHelper.Options.Builder.addInnerEditTexts(EditText...)
Pour définir EditText
comme gestionnaire de données textuelles par défaut, transmettez EditText
en tant que
le premier argument de l'appel
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
Par exemple, si
votre cible de dépôt gère les images, mais contient des champs de texte modifiables (T1
, T2
,
et T3
, définissez T2
comme valeur par défaut, comme suit:
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();
Gérer les données dans les cibles de dépôt
La méthode DropHelper.configureView()
accepte un OnReceiveContentListener
.
que vous créez pour gérer l'ClipData
de glisser-déposer. Le glisser-déposer des données
est fournie à l'écouteur dans
objet ContentInfoCompat
.
L'objet contient des données textuelles. Les supports, tels que les images, sont représentés par
URI.
OnReceiveContentListener
gère également les données fournies à la cible de dépôt par
les interactions utilisateur autres que le glisser-déposer, comme les opérations de copie et
coller : lorsque DropHelper.configureView()
est utilisé pour configurer les éléments suivants
types de vues:
- Toutes les vues, si l'utilisateur est équipé d'Android 12 ou version ultérieure.
AppCompatEditText
, si l'utilisateur exécute une version d'Android antérieure à Android 7.0.
Types MIME, autorisations et validation du contenu
La vérification du type MIME par DropHelper
est basée sur le glisser-déposer
ClipDescription
, qui est
créé par l'application qui fournit
les données de glisser-déposer. Validez le
ClipDescription
pour vous assurer que les types MIME sont correctement définis.
DropHelper
demande toutes les autorisations d'accès pour les URI de contenu contenus dans le
glisser-déposer ClipData
. Pour en savoir plus, consultez
DragAndDropPermissions
La
vous permettent de résoudre les URI de contenu lors du traitement du glisser-déposer
données.
DropHelper
ne valide pas les données renvoyées par les fournisseurs de contenu lorsque
résoudre les URI dans les données supprimées. Recherchez les valeurs nulles et vérifiez l’exactitude de
toutes les données résolues.