안드로이드 앱 개발기 #20 - 클립보드에 텍스트 복사하는 함수 만들어 보기 (Kotlin)
클립보드에 텍스트를 복사하는 코드를 한 블로그에서는 이렇게 구현하고 있습니다. (관련 블로그는 아래 참고 사이트에 있습니다.)
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
위 코드는 자바 코드인데요. 복사할 때마다 3~4줄의 코드를 사용하는 것은 비효율적입니다. 별도 함수를 만들고 이를 호출하는 것이 낫습니다.
자바 코드
자바 언어로는 유틸 클래스를 만들고 그 안에 클립보드에 텍스트 복사하는 함수를 추가하는 것을 고려해볼 수 있습니다.
class ClipboardUtil {
public static void copyText(Context context, String text) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", text);
clipboard.setPrimaryClip(clip);
}
}
코틀린 코드
코틀린 언어로는 유틸 클래스 대신 Context 또는 ClipboardManager 클래스로부터 확장함수 정의를 고려해볼 수 있습니다.
Context 클래스로부터 확장 함수
fun Context.copyToClipboard(text: String) {
val clipboardManager = getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label", text)
clipboardManager.setPrimaryClip(clipData)
}
ClipboardManager 클래스로부터 확장 함수
fun ClipboardManager.copyToClipboard(text: String) {
val clipData = ClipData.newPlainText("label", text)
setPrimaryClip(clipData)
}
고민 거리
Context, ClipboardManager 또는 제3의 클래스 중 어떤 것으로 확장하는 것이 더 좋을지는 고민해볼 문제입니다. 이에 대해서는 추후 다시 다뤄볼 예정입니다.
참고 링크
https://hello-bryan.tistory.com/125
지난 안드로이드 앱 개발기
- #19 - 데이터 바인딩 적용했으나 UI 자동 업데이트 되지 않는 문제
- #18 - 에뮬레이터에서 토스트 안 보이는 문제 (1)
- #17 - 유닛 테스트를 실행할 수 없는 문제 해결
- #16 - 잘 되던 유닛 테스트를 실행할 수 없는 문제
- #15 - 앱 재시작 코드
- #14 - Fragment 사용시 간혹 발생할 수 있는 Fragment not attached to Activity 문제
- #13 - Retrofit2 활용 서버로부터 받을 데이터 유형 JsonElement (JSONObject 사용 불가)
- #12 - Glide 활용하여 이미지 다운로드 받는 코드
- #11 - 처리할 수 없는 예외/크래쉬 발생시 앱 재시작하기
- #10 - 안드로이드 스튜디오 업그레이드 후 단축키가 안되면? (맥북)
- #9 - LiveData 객체에 동일 데이터 설정하면 observer 실행되는지 확인 목적의 샘플 프로젝트
- #8 - 안드로이드 스튜디오에서 빌드시 발생하는 Build Tools revision 31.0.0 오류
- #7 - 'UGC(사용자 생성 콘텐츠) 정책 미준수'로 심사 거절
- #6 - 뷰에 역마진 적용 불가시 translationX, translationY 속성 사용하기
- #5 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #4 - 프로젝트 생성 후 빌드시 발생 오류: The minCompileSdk (31) specified in a dependency's AAR metadata
- #3 - 무한 롤링 배너 만드는 법을 찾았으나, 높이를 wrap_content로 지정이 안 먹히는 문제점이...
- #2 - setContentView 메소드의 파라메터를 변경하지 않아서 발생한 화면 오류
- #1 - 페이스북 로그인 연동시 발생했던 문제들
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.