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 bir resim composable oluşturun ve dragAndDropSource
değiştiriciyi ekleyin. Lansman hedefi ayarlamak için
başka bir composable resim oluşturun ve dragAndDropTarget
değiştiriciyi ekleyin.
Değiştiriciler birden fazla sürükleme kaynağına ve bırakma hedefine uygulanabilir.
Değiştiriciler, View
uygulamalarıyla birlikte çalışabilen ClipData
sayesinde uygulamaların iki veya daha fazla composable arasında veri paylaşmasını sağlar.
Sürükleme kaynağı belirtme
Bir bileşen içindeki sürükleme etkinliklerini etkinleştirmek için dragAndDropSource
değiştiricisini ekleyin.
Bu işlem, parametre olarak bir işlev alır. Bu işlevin içinde, aktarılabilir verileri temsil etmek için DragAndDropTransferData
simgesini kullanın. Veriler bir uzak URI, panodaki zengin metin verileri, yerel bir dosya veya daha fazlası olabilir, ancak bunların bir ClipData
nesnesine sarmalanması gerekir. Örneğin aşağıdaki gibi bir düz metin girin:
Modifier.dragAndDropSource { _ -> 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
oluşturucu bir flags
bağımsız değişkenini kabul eder. Aşağıdaki örnekte DRAG_FLAG_GLOBAL
sabiti, verilerin bir uygulamadan diğerine sürüklenebileceğini belirtir:
Modifier.dragAndDropSource { _ -> DragAndDropTransferData( ClipData.newPlainText( "image Url", url ), flags = View.DRAG_FLAG_GLOBAL ) }
DragAndDropTransferData
, Android View sistemi tarafından desteklenen işaretleri kabul eder.
Mevcut işaretlerin kapsamlı listesi için View sabit değerleri listesine bakın.
Lansman verilerini al
Sürükleyip bırakma etkinliği alabilmek için bir composable'a dragAndDropTarget
değiştiricisini atayın. Değiştiricinin iki parametresi vardır: İlki filtre görevi görür ve değiştiricinin kabul edebileceği veri türünü belirtir. İkincisi ise verileri bir geri çağırmada sunar.
Geri çağırma örneğinin hatırlanması gerektiğini unutmayın. Aşağıdaki snippet'te, geri çağırmanın nasıl hatırlanacağı gösterilmektedir:
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 tüketilirse true
değerini veya etkinlik reddedilirse ve üst bileşene yayılmazsa false
değerini döndürür.
Sürükleyip bırakma etkinliklerini yönetme
Kullanıcı arayüzü ve uygulama davranışının hassas bir şekilde kontrolü için sürükle ve bırak etkinliklerinin bir bileşene ne zaman başladığını, sona erdiğini veya bir bileşene ne zaman girdiğini ya da bileşenden çıktığını gözlemlemek üzere DragAndDropTarget
arayüzünde geri çağırmaları geçersiz kılın:
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