DropHelper sınıfı çok daha basittir
uygulanmasına yardımcı olur. Jetpack'in bir üyesi
DragAndDrop kitaplığı, DropHelper
API düzeyi 24'e kadar geriye dönük uyumluluk sağlar.
Lansman hedeflerini belirtmek, bırakma hedefi vurgulamasını özelleştirmek için DropHelper
ve çıkarılan verilerin nasıl işleneceğini tanımlar.
Sürükleme kaynağını ayarla
Başlamak için DragStartHelper oluşturun
kaynak görünümü ve
OnDragStartListener.
OnDragStartListener bölgesinde,
geçersiz kılma yöntemi onDragStart(). ClipData nesnesi oluşturun
ve taşınan veriler için ClipData.Item nesne. ClipData kapsamında,
ClipDescription nesnesinde depolanan meta verileri
ClipData Veri hareketini temsil etmeyen sürükleyip bırakma 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); } });
Lansman hedeflerini belirleyin
Kullanıcı bir görünümün üzerine gölge bıraktığında görünümün yapılandırılması gerekir ve doğru yanıt vermek için layıkıyla gereklidir.
DropHelper.configureView()
düşüş hedeflerini belirtmenize olanak tanıyan statik ve aşırı yüklenmiş bir yöntemdir. Bu
parametreleri aşağıdakileri içerir:
- Mevcut
Activity- Şunun için kullanılır: URI izinleri tıklayın.- Düşüş hedefi olarak kullanılan bir
View.- MIME türleri düşüş hedefi, atlanan verilerden kabul edebilir.
- Düşüş hedefi olarak kullanılan bir
- Düşüş hedefi için yapılandırma seçenekleri (özellikle
yerleştirilmiş
EditTextalanları. OnReceiveContentListenerolması gerekir.
Örneğin, resim kabul eden bir düşüş hedefi oluşturmak için aşağıdaki yöntem çağrıları:
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 ayarlandığında,
vurgu köşe yarıçapı 16 dp olarak ayarlı ve EditText
bileşenleri boştur. Ayrıntılar için aşağıdaki bölüme bakın.
Lansman hedeflerini yapılandırın
DropHelper.Options
inner class ile bırakma hedeflerini yapılandırmanız gerekir. Aşağıdakilere sınıfın bir örneğini sağlayın:
DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener)
yöntemidir. Daha fazla bilgi edinmek için önceki bölüme bakın.
Hedef vurgulamayı özelleştirin
DropHelper, kullanıcılar sürüklerken bir vurgulama gösterecek şekilde bırakma hedeflerini yapılandırır
hedeflerin üzerindedir. DropHelper, varsayılan stil özellikleri sağlar ve
DropHelper.Options, vurgu rengini ayarlamanıza ve
vurgunun dikdörtgeninin köşe yarıçapını belirler.
Şunu kullanın:
DropHelper.Options.Builder
sınıfını kullanarak DropHelper.Options örneği oluşturun ve yapılandırma seçeneklerini ayarlayın.
aşağıdaki örnekte gösterildiği gibi:
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şleme
DropHelper, hedef şunları içerdiğinde odaklanma hedefi içinde odağı da kontrol eder:
düzenlenebilir metin alanları.
Bırakma hedefleri, tek bir görünüm veya bir görünüm hiyerarşisi olabilir. Düşen hedef görünümü
hiyerarşi bir veya daha fazla EditText içeriyorsa
bileşenlerin listesini çıkarıp
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
.
DropHelper, bırakma hedefi görünümündeki EditText bileşeni engelliyor
hiyerarşinin, sürükleme etkileşimleri sırasında kapsayıcı görünümden odağı çalmasına engel olur.
Ayrıca, sürükleyip bırakma ClipData
metin ve URI verilerini içeriyorsa, DropHelper, EditText değerlerinden birini seçer
bileşenlerden bazılarını hariç tutmalısınız. Seçim şuna göre yapılır:
şu öncelik sırasına göre:
ClipDataöğesinin atıldığıEditText.- Metin imlecini içeren
EditText(düzeltme işareti). - Şu kullanıcıya yapılan arama için sağlanan ilk
EditText:DropHelper.Options.Builder.addInnerEditTexts(EditText...).
Varsayılan metin veri işleyicisi olarak bir EditText ayarlamak için EditText öğesini şu şekilde geçirin:
çağrısının ilk bağımsız değişkeni
DropHelper.Options.Builder.addInnerEditTexts(EditText...). Örneğin,
lansman hedefiniz resimleri işliyor ancak düzenlenebilir metin alanları içeriyor T1, T2
ve T3 için T2 öğesini şu şekilde varsayılan olarak ayarlayı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();
Düşüş hedeflerindeki verileri işleme
DropHelper.configureView() yöntemi OnReceiveContentListener kabul eder
için oluşturduğunuz öğedir. ClipData. Sürükleme ve bırakma verileri
dinleyiciye
ContentInfoCompat nesnesini tanımlayın.
Metin verileri nesnede var. Resimler gibi medya,
URI'lar.
Ayrıca OnReceiveContentListener, düşüş hedefine sağlanan verileri şu şekilde işler:
sürükle ve bırak dışındaki kullanıcı etkileşimleri (örneğin, kopyalama ve
yapıştır: Aşağıdakileri yapılandırmak için DropHelper.configureView() kullanıldığında
Görünüm türleri:
- Kullanıcı Android 12 veya sonraki bir sürümü çalıştırıyorsa tüm görünümler.
AppCompatEditTextKullanıcı Android 7.0'a kadar Android sürümü çalıştırıyorsa.
MIME türleri, izinler ve içerik doğrulama
DropHelper tarafından yapılan MIME türü kontrolü, sürükleyip bırakma işlemine göre
ClipDescription
sağlayan uygulama tarafından oluşturulur. Şunları doğrulayın:
MIME türlerinin doğru şekilde ayarlandığından emin olmak için ClipDescription.
DropHelper,
ClipData sürükleyip bırakın. Daha fazla bilgi için bkz.
DragAndDropPermissions. İlgili içeriği oluşturmak için kullanılan
izinleri, sürükleyip bırakma işlemini işlerken içerik URI'lerini çözümlemenizi sağlar
dışı verilerdir.
DropHelper, aşağıdaki durumlarda içerik sağlayıcılar tarafından döndürülen verileri doğrulamaz:
bırakılan verilerdeki URI'leri çözümliyor. Boş değer olup olmadığını kontrol edin ve
tüm çözümlenmiş veriler dahildir.