DropHelper
sınıfı, sürükle ve bırak özelliklerinin uygulanmasını kolaylaştırır. Jetpack DragAndDrop
kitaplığının bir üyesi olan DropHelper
, API düzeyi 24'e kadar geriye dönük uyumluluk sunar.
Bırakma hedefleri belirtmek, bırakma hedefi vurgulamasını özelleştirmek ve bırakılan verilerin nasıl işleneceğini tanımlamak için DropHelper
öğesini kullanın.
Sürükleme kaynağını ayarla
Başlamak için sürükleme kaynak görünümü ve OnDragStartListener
ile DragStartHelper
oluşturun.
OnDragStartListener
'da onDragStart()
yöntemini geçersiz kılın. Taşınmakta olan veriler için bir ClipData
ve ClipData.Item
nesnesi oluşturun. ClipData
kapsamında, ClipData
içindeki ClipDescription
nesnesinde depolanan tedarik meta verileri. Veri taşımayı temsil etmeyen bir sürükle ve bırak işlemi için gerçek bir nesne yerine null
kullanmak isteyebilirsiniz.
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); } });
Düşme hedefleri belirtme
Kullanıcı bir görünümün üzerine gölge koyduğunda görünümün, verileri kabul edecek ve doğru şekilde yanıt verecek şekilde uygun şekilde yapılandırılması gerekir.
DropHelper.configureView()
, bırakma hedefleri belirtmenizi sağlayan, statik ve aşırı yüklenmiş bir yöntemdir. Parametreler şunları içerir:
- URI izinleri için kullanılan mevcut
Activity
.- Düşme hedefi görevi gören bir
View
.- Bırakılan verilerin kabul edebileceği MIME türleri.
- Düşme hedefi görevi gören bir
- Düşüş hedefi için yapılandırma seçenekleri, özellikle de yerleşik
EditText
alanlarının bir listesidir. - Bırakılan verileri işlemek için
OnReceiveContentListener
.
Örneğin, resim kabul eden bir bırakma hedefi oluşturmak için aşağıdaki yöntem çağrılarından birini kullanın:
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);
İkinci çağrı, bırakma hedefi yapılandırma seçeneklerini atlar. Bu durumda, bırakma hedefi vurgu rengi temanın ikincil (veya vurgu) rengine, vurgu köşesi yarıçapı 16 dp olarak ayarlanır ve EditText
bileşenlerinin listesi boş olur. Ayrıntılar için aşağıdaki bölüme bakın.
Düşme hedeflerini yapılandırma
DropHelper.Options
iç sınıfı, bırakma hedeflerini yapılandırmanıza olanak tanır. DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener
) yöntemine sınıfın bir örneğini sağlayın. Daha fazla bilgi için önceki bölüme bakın.
Açılır hedefi vurgulamayı özelleştirin
DropHelper
, kullanıcılar içeriği hedeflerin üzerine sürükledikçe vurguyu gösterecek şekilde bırakma hedeflerini yapılandırır. DropHelper
, varsayılan stil özellikleri sunar. DropHelper.Options
ise vurgu renginin rengini ayarlayabilmenizi ve vurgunun dikdörtgeninin köşe yarıçapını belirtmenizi sağlar.
DropHelper.Options
örneği oluşturmak ve yapılandırma seçeneklerini aşağıdaki örnekte gösterildiği gibi ayarlamak için DropHelper.Options.Builder
sınıfını kullanın:
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();
Bırakma hedeflerindeki EditText bileşenlerini işleyin
DropHelper
, hedef düzenlenebilir metin alanları içerdiğinde bırakma hedefi içindeki odağı da kontrol eder.
Bırakma hedefleri, tek bir görünüm veya görünüm hiyerarşisi olabilir. Açılır hedef görünüm hiyerarşisi bir veya daha fazla EditText
bileşeni içeriyorsa bırakma hedefi vurgulamasının ve metin verilerinin işlenmesinin doğru bir şekilde çalıştığından emin olmak için DropHelper.Options.Builder.addInnerEditTexts(EditText...)
'e bileşenlerin listesini sağlayın.
DropHelper
, bırakma hedefi görünümü hiyerarşisindeki EditText
bileşenlerinin sürükleme etkileşimleri sırasında odağı içeren görünümden çalmasını engeller.
Ayrıca, sürükle ve bırak işlevi ClipData
metin ve URI verilerini içeriyorsa DropHelper
, metin verilerini işlemek için bırakma hedefindeki EditText
bileşenlerinden birini seçer. Seçim, aşağıdaki öncelik sırasına göre yapılır:
ClipData
öğesinin bırakıldığıEditText
.- Metin imlecini (düzeltme işareti) içeren
EditText
. - İlk
EditText
,DropHelper.Options.Builder.addInnerEditTexts(EditText...)
için yapılan çağrıya sağlanan.
EditText
öğesini varsayılan metin veri işleyicisi olarak ayarlamak için EditText
öğesini, DropHelper.Options.Builder.addInnerEditTexts(EditText...)
çağrısının ilk bağımsız değişkeni olarak iletin. Örneğin, bırakma hedefiniz resimleri işliyor ancak T1
, T2
ve T3
düzenlenebilir metin alanları içeriyorsa T2
öğesini aşağıdaki gibi varsayılan yapın:
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();
Bırakma hedeflerindeki verileri işleyin
DropHelper.configureView()
yöntemi, ClipData
sürükleyip bırakma işlemini işlemek için oluşturduğunuz bir OnReceiveContentListener
öğesini kabul eder. Sürükleyip bırakma verileri işleyiciye bir ContentInfoCompat
nesnesinde sağlanır.
Nesnede metin verileri var. Medya (resimler gibi) URI'larla temsil edilir.
Aşağıdaki görünüm türlerini yapılandırmak için DropHelper.configureView()
kullanıldığında, OnReceiveContentListener
, bırakma hedefine sürükle ve bırak gibi olmayan kullanıcı etkileşimleri (kopyalama ve yapıştırma gibi) tarafından sağlanan verileri de işler:
- Kullanıcı Android 12 veya sonraki bir sürümü çalıştırıyorsa tüm görünümler.
AppCompatEditText
: Kullanıcı, Android 7.0'a kadarki bir Android sürümünü çalıştırıyorsa.
MIME türleri, izinler ve içerik doğrulama
DropHelper
tarafından kontrol edilen MIME türü, sürükle ve bırak verilerini sağlayan uygulama tarafından oluşturulan sürükle ve bırak
ClipDescription
yöntemine dayanır. MIME türlerinin doğru şekilde ayarlandığından emin olmak için ClipDescription
öğesini doğrulayın.
DropHelper
, sürükle ve bırak ClipData
işlevinde bulunan içerik URI'leri için tüm erişim izinlerini ister. Daha fazla bilgi için DragAndDropPermissions
adresini inceleyin. İzinler, sürükle ve bırak verilerini işlerken içerik URI'lerini çözümlemenize olanak tanır.
DropHelper
, bırakılan verilerdeki URI'ları çözerken içerik sağlayıcılar tarafından döndürülen verileri doğrulamaz. Boş olup olmadığını kontrol edin ve çözülmüş verilerin doğruluğunu onaylayın.