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ş
EditText
alanları. OnReceiveContentListener
olması 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.
AppCompatEditText
Kullanı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.