텍스트를 클립보드에 복사하는 기능을 구현해 보자. 이 기능을 구현하기 위해서는 "ClipboarManager"라는 클래스를 사용해야한다. 다만 주의할 점은 "android.content.ClipboardManager"를 선언해 주어야 한다는 것이다. Android Document는 아래 링크에 있다.
https://developer.android.com/guide/topics/text/copy-paste?hl=ko
안드로이드 클립보드 서비스를 가진, ClipboardManager 인스턴스 생성하기
우선 ClipboarManager 인스턴스를 선언해 준다.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
여기서 getSystemService() 메소드는 안드로이드가 제공하는 시스템 레벨 서비스를 요청한다. 이는 시스템에서 제공하는 디바이스나 안드로이드 Framework내에서 다른 기능의 애플리케이션과 공유하고자 하는 시스템 객체를 얻을때 사용한다. Context.CLIPBOARD_SERVICE는 안드로이드 프레임워크의 클립보드 서비스를 가리키게 된다.
https://developer.android.com/reference/android/content/Context#CLIPBOARD_SERVICE
Clip할 데이터 가져오기
그 다음 ClipData를 지정해 준다. ClipData객체는 클립보드에 clipped된 데이터를 나타내는 객체이다.
https://developer.android.com/reference/android/content/ClipData
ClipData clip = ClipData.newPlainText(label, text);
newPlainText() 메소드는 Document에 명시되어있듯이
For help in correctly constructing a clip with the correct MIME type, use
newPlainText(java.lang.CharSequence, java.lang.CharSequence)
,
newUri(android.content.ContentResolver, java.lang.CharSequence, android.net.Uri)
, and
newIntent(java.lang.CharSequence, android.content.Intent)
.
올바른 MIME 타입에 맞게끔 클립이 될 수 있도록 도와주는 메소드이다. 첫번째 매개변수는 CharSequence타입의 label매개변수인데, 이는 사용자에게 클립보드에 클립된 내용에 대해 보여줄때 사용하는 Description이라고 한다.
여기서 작성한 label을 출력하기 위해서는 ClipData.getDescription().getLabel()을 통해 얻을 수 있다. getDescription()메소드는 ClipDescription타입 객체를 반환하는데, 이 객체의 getLabel()메소드를 이용해서 label값을 얻을 수 있는 것이다.
https://developer.android.com/reference/android/content/ClipDescription#getLabel()
두번째 매개변수는 clipped될 텍스트를 의미한다. 필자는 소스코드에 아래와 같이 작성하였다.
ClipData clip = ClipData.newPlainText("Text you write to box",editText1.getText().toString());
Clipboard에 Clip할 내용 지정하기
세번째로 setPrimaryClip() 메소드를 이용해서 클립보드에 클립을 지정한다.매개변수로는 ClipData타입의 매개변수가 들어가며, 위에 생성한 ClipData를 넣어주면 된다.
clipboard.setPrimaryClip(clip);
단순히 텍스트를 클립보드에 넣는다는 가정하에, setText(CharSequence text) 메소드도 있지만 이 메소는 Deprecated되었으므로 사용하지 말자.
예시 결과물
'Android' 카테고리의 다른 글
[Android] Touch,Gesture 이벤트 처리 (0) | 2022.03.28 |
---|---|
[Android] 예시 SMS 레이아웃 만들기 (0) | 2022.03.27 |
[Android] Table Layout (0) | 2022.03.26 |
[Android] View의 Margin과 Padding (0) | 2022.03.26 |
[Android] 뷰 정렬하기 (0) | 2022.03.26 |