Jetpack Compose, sürükle ve bırak özelliğini iki değiştiriciyle destekler:
dragAndDropSource
: Sürükleme hareketinin başlangıç noktası olarak bir composable'ı belirtirdragAndDropTarget
: Bırakılan verileri kabul eden bir composable'ı belirtir
Örneğin, kullanıcıların uygulamanızda resim sürüklemelerini sağlamak için composable
ve dragAndDropSource
değiştiricisini ekleyin. Hedef oluşturmak için başka bir hedef belirleyin
composable'ı seçin ve dragAndDropTarget
değiştiricisi ekleyin.
Değiştiriciler birden fazla sürükleme kaynağına ve bırakma hedefine uygulanabilir.
Değiştiriciler, uygulamaların iki veya daha fazla composable arasında veri paylaşmasını sağlar
View
uygulamalarıyla birlikte çalışabilen ClipData
kullanılarak.
Sürükleme etkinliği başlatma
Bir bileşen içindeki sürükleme etkinliklerini etkinleştirmek için dragAndDropSource
değiştiricisini ekleyin,
Bu da parametre olarak bir askıya alma işlevini alır. İşlev, kullanıcıyı
etkileşimi olan basit bir öğedir. dragAndDropSource
değiştirici
bir işaretçi giriş etkinliği alana kadar bekler ve ardından lambda'yı yürütür
etkinlik işleyiciye iletilir. lambda'yı kullanarak çeşitli giriş etkinliklerini,
dokunarak veya uzun basarak yapabilirsiniz. Daha fazla bilgi için bkz. İşaretçi
giriş yapın.
İşaretçi giriş etkinliği genellikle aşağıdaki gibi uzun basmayla gerçekleştirilir:
Modifier.dragAndDropSource { detectTapGestures(onLongPress = { // Transfer data here. }) }
Sürükleyip bırakma oturumu başlatmak için startTransfer()
işlevini çağırın.
Bu kapsam dahilinde, DragAndDropTransferData
aktarılabilir verilerdir. Veriler bir uzak URI, esnek metin verileri:
yerel bir dosya veya daha fazlası olabilir, ancak tüm öğelerin tek bir
ClipData
nesne algılandı. Aşağıdaki gibi bir düz metin ekleyin:
Modifier.dragAndDropSource { detectTapGestures(onLongPress = { startTransfer( DragAndDropTransferData( ClipData.newPlainText( "image Url", url ) ) ) }) }
Sürükleme işleminin uygulamanın sınırlarını aşmasına izin vermek için
DragAndDropTransferData
kurucusu, flags
bağımsız değişkenini kabul eder.
aşağıdaki örnekte DRAG_FLAG_GLOBAL
sabiti, verilerin
sürüklenebilir:
Modifier.dragAndDropSource { detectTapGestures(onLongPress = { startTransfer( DragAndDropTransferData( ClipData.newPlainText( "image Url", url ), flags = View.DRAG_FLAG_GLOBAL ) ) }) }
DragAndDropTransferData
, Android View sistemi tarafından desteklenen işaretleri kabul eder. Görüntüleyin
Mevcut işaretlerin kapsamlı listesi için View sabit değerlerinin listesini inceleyin.
Lansman verilerini al
Bir composable'ı etkinleştirmek için dragAndDropTarget
değiştiricisini bir composable'a atayın
almak için kullanabileceğiniz bir araçtır. Değiştiricinin iki parametresi vardır: birinci
değiştiricinin kabul edebileceği veri türünü belirler ve
ikincisi bir geri aramada verileri sunar.
Geri çağırma örneğinin hatırlanması gerektiğini unutmayın. Aşağıdaki snippet geri çağırmanın nasıl hatırlanacağını gösterir:
val callback = remember { object : DragAndDropTarget { override fun onDrop(event: DragAndDropEvent): Boolean { // Parse received data return true } } }
Sonraki snippet, bırakılan düz metnin nasıl işleneceğini gösterir:
Modifier.dragAndDropTarget( shouldStartDragAndDrop = { event -> event.mimeTypes().contains(ClipDescription.MIMETYPE_TEXT_PLAIN) }, target = callback )
Geri çağırma işlevi, etkinlik kullanılırsa true
veya false
değerini döndürmelidir
etkinlik reddedilir ve üst bileşene yayılmazsa.
Sürükleyip bırakma etkinliklerini yönetme
Şu durumda gözlemlemek için DragAndDropTarget
arayüzünde geri çağırmaları geçersiz kılın:
Sürükleyip bırakma etkinliği, kesin sonuç vermek üzere bir bileşene girerken, biter veya bir bileşene girer ya da bileşenden çıkar
Kullanıcı arayüzünün ve uygulamanın davranışının kontrolü:
object : DragAndDropTarget { override fun onStarted(event: DragAndDropEvent) { // When the drag event starts } override fun onEntered(event: DragAndDropEvent) { // When the dragged object enters the target surface } override fun onEnded(event: DragAndDropEvent) { // When the drag event stops } override fun onExited(event: DragAndDropEvent) { // When the dragged object exits the target surface } override fun onDrop(event: DragAndDropEvent): Boolean = true }
Ek kaynaklar
Codelab: Oluştur'da sürükleme ve bırakma