티스토리 뷰

TextView 를 길게 눌러서 복사하고 붙여 넣기 하는 방법을 알아보겠습니다.

 

1. 실행 화면

 

클립보드 실행화면

2. activity_main.xml

  • TextView: 사용자가 LongClick 으로 복사할 텍스트
  • EditText: 복사된 텍스트를 붙여넣기 할 공간
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvHelloWorld"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="붙여넣을 곳"
        android:inputType="text"
        app:layout_constraintTop_toBottomOf="@id/tvHelloWorld"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

3. MainActivity.kt

  • setOnLongClickListener: TextView에 LongClick 할 수 있도록 설정한다.
  • clipboard: 안드로이드 시스템에서 ClipboardManager를 가져온다.
  • clip: Text를 Clipboard 에 추가하기 위해 데이터 설명과 데이터 자체를 가져온다.
  • clipboard.setPrimaryClip: clipboardmanager에 가져온 clip을 추가한다.
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.tvHelloWorld.setOnLongClickListener {
            //시스템 클립보드 가져오기
            val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager

            // 새로운 ClipData 객체로 데이터 복사하기
            val clip: ClipData =
                ClipData.newPlainText("simple text", binding.tvHelloWorld.text.toString())

            // 새로운 클립 객체를 클립보드에 배치합니다.
            clipboard.setPrimaryClip(clip)

            Toast.makeText(this, "복사 완료.", Toast.LENGTH_SHORT).show()
            false
        }
    }
}