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()
자바
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)
자바
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
드림
클래스를 사용하여 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()
자바
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
중 하나를 선택합니다.
구성요소를 호출하여 텍스트 데이터를 처리합니다. 선택은
규칙을 따릅니다
ClipData
가 삭제되는EditText
입니다.- 텍스트 커서 (캐럿)가 포함된
EditText
입니다. - 호출에 제공된 첫 번째
EditText
는DropHelper.Options.Builder.addInnerEditTexts(EditText...)
입니다.
EditText
를 기본 텍스트 데이터 핸들러로 설정하려면 EditText
를 DropHelper.Options.Builder.addInnerEditTexts(EditText...)
호출의 첫 번째 인수로 전달합니다. 예를 들어, 드롭 타겟이 이미지를 처리하지만 편집 가능한 텍스트 필드 T1
, T2
, T3
을 포함하는 경우 T2
를 다음과 같이 기본값으로 설정합니다.
Kotlin
val options: DropHelper.Options = DropHelper.Options.Builder() .addInnerEditTexts(T2, T1, T3) .build()
자바
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 7.0 이하 버전의 Android를 실행 중인 경우
MIME 유형, 권한, 콘텐츠 유효성 검사
DropHelper
에 의한 MIME 유형 확인은 드래그 앤 드롭을 기반으로 합니다.
ClipDescription
,
드래그 앤 드롭 데이터를 제공하는 앱에서 생성됩니다.
ClipDescription
: MIME 유형이 올바르게 설정되었는지 확인합니다.
DropHelper
는
ClipData
드래그 앤 드롭 자세한 내용은 DragAndDropPermissions
를 참고하세요. 이
권한을 사용하면 드래그 앤 드롭을 처리할 때 콘텐츠 URI를 결정할 수 있습니다.
데이터를 수집하는 데 사용됩니다
DropHelper
는 다음 경우에 콘텐츠 제공업체가 반환한 데이터의 유효성을 검사하지 않습니다.
확인합니다. null인지 확인하고
모든 결정된 데이터