השיעור DropHelper הופך לפשוט יותר
הטמעת יכולות של גרירה ושחרור. חבר/ה ב-Jetpack
DragAndDrop ספרייה, DropHelper
תאימות לאחור עד לרמת API 24.
אפשר להשתמש ב-DropHelper כדי לציין יעדים ולשחררים, להתאים אישית את ההדגשה של היעדים
ומגדירים את אופן הטיפול בנתונים שיושמטו.
הגדרת מקור הגרירה
כדי להתחיל, צריך ליצור DragStartHelper
באמצעות תצוגת מקור לגרירה
OnDragStartListener
ב-OnDragStartListener,
שינוי מברירת המחדל onDragStart(). יצירת אובייקט ClipData
ו-ClipData.Item בשביל הנתונים המועברים. כחלק מClipData,
מטא-נתונים שמאוחסנים באובייקט ClipDescription בתוך
ClipData כדי לבצע פעולת גרירה ושחרור שלא מייצגת תנועת נתונים,
כדאי להשתמש ב-null במקום באובייקט בפועל.
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); } });
הגדרת יעדי ירידה
כשמשתמש משחרר הטלת צללית על תצוגה, צריך להגדיר את התצוגה. כדי לקבל את הנתונים ולהגיב בצורה נכונה.
DropHelper.configureView()
היא שיטה סטטית ועומס יתר שמאפשרת לציין יעדים למיקוד. שלו
כוללים את הפרמטרים הבאים:
Activityהנוכחי – משמש ל- URI .- אפשרויות תצורה עבור היעד הגיאוגרפי - בפרט, רשימה של
EditTextשדות מוטמעים. OnReceiveContentListenerכדי לטפל בנתונים שיושמטו.
לדוגמה, כדי ליצור יעד בענן שמקבל תמונות, משתמשים באחת מהאפשרויות קריאות לשיטות הבאות:
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);
הקריאה השנייה לא תכיל את אפשרויות ההגדרה של היעד הגיאוגרפי. במקרה כזה
צבע היעד של ההדגשה מוגדר לצבע המשני (או המשני) של העיצוב.
הרדיוס של פינת ההדגשה מוגדר כ-16dp והרשימה של EditText
ריקים. פרטים נוספים זמינים בקטע הבא.
הגדרת יעדי ירידה
DropHelper.Options
במחלקה הפנימית אפשר להגדיר יעדים שיושמטו. צריך לספק מופע של הכיתה כדי
DropHelper.configureView(Activity, View, String[], Options,
OnReceiveContentListener)
. מידע נוסף זמין בקטע הקודם.
התאמה אישית של ההדגשה של יעדי המודעות
DropHelper מגדיר יעדים של שחרור כדי להציג הדגשה כשמשתמשים גוררים
תוכן מעל היעדים. DropHelper מספק עיצוב שמוגדר כברירת מחדל
באמצעות DropHelper.Options אפשר להגדיר את צבע ההדגשה ולציין את
של מלבן ההדגשה.
משתמשים ב
DropHelper.Options.Builder
class כדי ליצור מכונה של DropHelper.Options ולהגדיר אפשרויות הגדרה,
כפי שאפשר לראות בדוגמה הבאה:
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();
טיפול ברכיבי EditText ביעדי ירידה
DropHelper גם שולט במיקוד בתוך יעד הירידה כשהיעד מכיל
שדות טקסט שניתנים לעריכה.
יעדי שחרור יכולים להיות תצוגה מפורטת אחת או היררכיית תצוגה מפורטת. אם התצוגה של היעד צונחת
ההיררכיה מכילה EditText אחד או יותר
מספקים רשימה של הרכיבים
DropHelper.Options.Builder.addInnerEditTexts(EditText...)
כדי לוודא שהדגשת היעד והטיפול בנתוני טקסט לא פועלים כראוי.
הפונקציה DropHelper מונעת רכיבי EditText בתצוגת היעד של הירידה
מ גניבת מיקוד מהתצוגה המפורטת במהלך אינטראקציות בגרירה.
כמו כן, אם סמל הגרירה והשחרור ClipData
כולל נתוני טקסט ו-URI, DropHelper בוחר באחת מהאפשרויות הבאות: EditText
רכיבים ביעד בענן כדי לטפל בנתוני הטקסט. הבחירה מבוססת על
סדר הקדימות הבא:
- ה-
EditTextשעליו ה-ClipDataהושמט. - השדה
EditTextשמכיל את סמן הטקסט (סמן). - ה-
EditTextהראשון סופק לשיחה ל-DropHelper.Options.Builder.addInnerEditTexts(EditText...).
כדי להגדיר EditText כ-handler של נתוני טקסט כברירת מחדל, צריך להעביר את EditText בתור
את הארגומנט הראשון של הקריאה
DropHelper.Options.Builder.addInnerEditTexts(EditText...). לדוגמה, אם
התיקייה בענן מטפלת בתמונות אבל מכיל שדות טקסט שניתנים לעריכה T1, T2,
ו-T3, מגדירים את T2 כברירת המחדל באופן הבא:
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();
טיפול בנתונים בירידה ביעדים
השיטה DropHelper.configureView() מקבלת OnReceiveContentListener
שיצרת כדי לטפל בגרירה ובשחרור ClipData. נתוני הגרירה והשחרור
מסופק למאזין
אובייקט ContentInfoCompat.
האובייקט מכיל נתוני טקסט. מדיה, כמו תמונות, מיוצגת על ידי
מזהי URI.
השדה OnReceiveContentListener מטפל גם בנתונים שסופקו ליעד לירידה באמצעות
אינטראקציות של משתמשים שאינן גרירה ושחרור - כמו העתקה
להדביק – כשנעשה שימוש ב-DropHelper.configureView() כדי להגדיר
סוגי צפיות:
- כל התצוגות, אם למשתמש פועלת מערכת Android מגרסה 12 ואילך.
AppCompatEditTextאם למשתמש פועלת גרסה של Android עד Android 7.0.
סוגי MIME, הרשאות ואימות תוכן
הבדיקה של סוג MIME על ידי DropHelper מבוססת על גרירה ושחרור
ClipDescription, שהוא
שנוצרה על ידי האפליקציה שמספקת את הנתונים מסוג 'גרירה ושחרור'. אימות של
ClipDescription כדי לוודא שסוגי ה-MIME מוגדרים כראוי.
DropHelper מבקש את כל הרשאות הגישה למזהי URI של תוכן הכלולים
ClipData גוררים ומשחררים. מידע נוסף זמין במאמר הבא:
DragAndDropPermissions
הרשאות מאפשרות לכם לזהות את מזהי ה-URI של התוכן במהלך עיבוד הגרירה והשחרור
.
DropHelper לא מאמת את הנתונים שמוחזרים על ידי ספקי התוכן כאשר
התאמת מזהי URI בנתונים שהושמטו. בדוק אם הערך הוא null ואמת את נכונות
כל הנתונים שנסגרו.