Clipboard를 사용해보자(복사, 붙여넣기)

지프치프·2022년 2월 4일
0

Android

목록 보기
41/89
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

Clipboard란 텍스트나 파일 등을 복사했을때 붙여넣기 전까지 파일을 임시로 저장해두는 곳이다.
이름의 유래는 해당 사무도구에서 가져왔다고 한다.

Android에서는 이 Clipboard에 대한 라이브러리를 지원한다.
지금부터 사용법을 한번 알아보도록 하겠다.

만들어볼 샘플 앱은 아래와 같다.

위에 Seekbar는 무시하도록 하자
UI_Sample이라고 써져있는 TextView를 클릭하면 클립보드에 복사가되고
버튼을 누르면 토스트 메세지로 붙여넣기 할 텍스트를 출력한다.

Code

우선 Clipboard를 사용하기 위해선
ClipboardManager를 사용해야 하는데 systemService를 통해서 가져오도록 하자

val clipManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager

복사하기

Clipboard에 데이터를 추가하려면 ClipData 객체에 먼저 담아주어야 한다.
이 객체를 만들기 위한 정적 메소드가 제공되는데 종류는 아래와 같다.

데이터의 종류에 따라 메소드가 달라지는데 필자는 단순 텍스트만 다룰 예정이므로
newPlainText() 메소드를 사용하였다.

            tvClipboard.setOnClickListener {
                val clip = ClipData.newPlainText("simple text", (it as TextView).text)
                clipManager.setPrimaryClip(clip)
                Toast.makeText(this@SeekbarActivity, "클립보드에 복사되었습니다.", Toast.LENGTH_SHORT).show()
                checkPaste(clipManager)
            }

newPlainText() 메소드를 사용하여 반환받은
ClipData객체를 ClipboardManagersetPrimaryClip() 메소드를 통해 넣어주면 clipboard에 저장이 된다.

마지막에 사용된 checkPaste() 메소드는 필자가 만든
붙여넣기가 가능여부를 체크하여 붙여넣기 버튼을 활성화하는 메소드인데
이 메소드에 대한 설명은 아래에서 마저 하도록 하겠다.

붙여넣기

붙여넣기는 매우 간단한데, ClipboardManager로부터 값을 가져오면 끝난다.
코드를 살펴보자

            btnClipboard.setOnClickListener {
                Toast.makeText(this@SeekbarActivity, "${clipManager.primaryClip?.getItemAt(0)?.text}", Toast.LENGTH_SHORT).show()
            }

그리고 복사할 때 사용했던 checkPaste() 메소드의 코드는 아래와 같다.

    private fun checkPaste(clipManager: ClipboardManager) {
        binding.btnClipboard.isEnabled = when {
            !clipManager.hasPrimaryClip() -> false
            !(clipManager.primaryClipDescription?.hasMimeType(MIMETYPE_TEXT_PLAIN))!! -> false
            else -> true
        }
    }

이 메소드는 클립보드에 클립이 포함 여부와 처리 가능한 데이터 유형인지 확인하여
붙여넣기 기능(버튼)을 활성화하는 기능을 가진다.

추신

위처럼 만들어본 샘플 앱은 ClipData가 처리 가능한 유형 중
텍스트만 다뤄본 것이다.
그 외에도 URI나 인텐트도 처리가 가능하니 자세한 사항은 공식 문서를 확인해보는 것이 좋겠다.

개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글