개발 공부/안드로이드

android textView의 text 복사하기-(ClipboardManager, textIsSelectable)

yong_DD 2022. 7. 3. 16:10

textView의 text를 복사하는 데에는 2가지 방법이 있다. text를 선택할 수 있게 하는 textIsSelectable을 사용하는 방법과 clipboard를 사용하는 방법이 있다.

1. textIsSelectable

 
 
 
 
   <TextView
        ...
        android:textIsSelectable="true"
        android:textColorHighlight="@color/teal_200"/>

TextView에 textIsSelctable을 true로 하면 textView를 롱클릭했을 경우 선택이 가능해진다.

(textColorHighlight에 색을 넣는 다면 해당색으로 선택이 된다.)

일반 텍스트, 주소, 전화를 두고 롱클릭을 한다면 위의 사진 처럼 자동으로 인식해서 주소일 때는 지도, 전화번호일 때는 전화걸기가 뜬다.

2. ClipBoardManager

보통 롱클릭시 작업을 하며, 선택이 없이 원하는 텍스트를 코드로 지정하여 클립보드에 넣게한다.

        val text1 = findViewById<TextView>(R.id.textView)
        val text2 = findViewById<TextView>(R.id.textView2)
        val text3 = findViewById<TextView>(R.id.textView3)

        text1.setOnLongClickListener {
            val clipBoard: ClipboardManager =
                getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
            val clip = ClipData.newPlainText("text",text1.text.toString())
            clipBoard.setPrimaryClip(clip)
            Toast.makeText(this,"복사되었습니다.",Toast.LENGTH_SHORT).show()
            return@setOnLongClickListener true
        }

        text2.setOnLongClickListener {
            val clipBoard: ClipboardManager =
                getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
            val clip = ClipData.newPlainText("location",text2.text.toString())
            clipBoard.setPrimaryClip(clip)
            Toast.makeText(this,"복사되었습니다.",Toast.LENGTH_SHORT).show()
            return@setOnLongClickListener true
        }

        text3.setOnLongClickListener {
            val clipBoard: ClipboardManager =
                getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
            val clip = ClipData.newPlainText("phone",text3.text.toString())
            clipBoard.setPrimaryClip(clip)
            Toast.makeText(this,"복사되었습니다.",Toast.LENGTH_SHORT).show()
            return@setOnLongClickListener true
        }
 

ClipData를 통해 클립보드에 저장할 정보를 만들어주고,

ClipboardManager을 가져와서 setPrimaryClip(ClipData clip)에 텍스트를 넣어놓은 clip을 가져와 넣으면 클립보드에 추가가 된다.