Android는 복사하여 붙여넣기를 지원하는 강력한 클립보드 기반 프레임워크를 제공합니다. 텍스트 문자열, 복잡한 데이터 구조, 텍스트 및 바이너리 스트림 데이터, 애플리케이션 애셋을 포함하여 단순한 데이터 유형과 복잡한 데이터 유형을 모두 지원합니다. 단순한 텍스트 데이터는 클립보드에 직접 저장되며 복잡한 데이터는 붙여넣기 애플리케이션이 콘텐츠 제공업체를 통해 확인하는 참조로 저장됩니다. 하나의 애플리케이션 내에서뿐 아니라 프레임워크를 구현하는 여러 애플리케이션 사이에서 모두 복사하여 붙여넣기를 할 수 있습니다.
클립보드 프레임워크
클립보드 프레임워크를 사용할 때 데이터를 클립 객체에 넣은 다음 클립 객체를 시스템 전체 클립보드에 배치합니다. 클립 객체는 다음 세 가지 형식 중 하나일 수 있습니다.
텍스트
텍스트 문자열입니다. 문자열을 클립 객체에 직접 넣은 다음 클립보드에 배치합니다. 문자열을 붙여넣으려면 클립보드에서 클립 객체를 가져와서 문자열을 애플리케이션의 저장소에 복사합니다.
URI
모든 URI 형식을 표시하는 Uri 객체입니다. 주로 콘텐츠 제공업체의 복잡한 데이터를 복사하기 위한 것입니다. 데이터를 복사하려면 Uri 객체를 클립 객체에 넣고 클립 객체를 클립보드에 배치합니다. 데이터를 붙여넣으려면 클립 객체와 Uri 객체를 가져와서 콘텐츠 제공업체와 같은 데이터 소스로 확인하고 소스에서 애플리케이션의 저장소로 데이터를 복사합니다.
인텐트
Intent입니다. 애플리케이션 바로가기 복사를 지원합니다. 데이터를 복사하려면 인텐트를 만들고 클립 객체에 넣은 다음 클립 객체를 클립보드에 배치합니다. 데이터를 붙여넣으려면 클립 객체를 가져온 다음 인텐트 객체를 애플리케이션의 메모리 영역으로 복사합니다.
이 게시글에서는 텍스트를 클립보드에 복사하고 에디트 텍스트에 붙혀넣기를 해보겠습니다.
버튼을 클릭했을 때, 텍스트에 있는 문자를 copyText에 담고, ClipManager 객체를 참조한 뒤, ClipData에 담아서 클립보드에 복사하는 코드입니다.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String copyText = textView.getText().toString();
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("copyText",copyText);
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(getApplicationContext(),"텍스트가 복사되었습니다.",Toast.LENGTH_SHORT).show();
}
});
전체 코드
activity_main.xml
<?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/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dp"
android:text="복사할 텍스트"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="텍스트 복사"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = findViewById(R.id.editText);
Button button = findViewById(R.id.button);
TextView textView = findViewById(R.id.textView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String copyText = textView.getText().toString();
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clipData = ClipData.newPlainText("copyText",copyText);
clipboardManager.setPrimaryClip(clipData);
Toast.makeText(getApplicationContext(),"텍스트가 복사되었습니다.",Toast.LENGTH_SHORT).show();
}
});
}
}
아래 스틱코드를 활용하면 더욱 빠르게 코딩할 수 있습니다.
https://stickode.com/detail.html?no=2691
'안드로이드 자바' 카테고리의 다른 글
[JAVA][Android] 녹음 기능 만들기 (0) | 2021.12.31 |
---|---|
[JAVA][Android] 비밀번호 hash 암호화하기 (0) | 2021.12.30 |
[JAVA][Android] 사진 다운로드 하기 (0) | 2021.12.19 |
[JAVA][Android] Retrofit으로 데이터 insert하기 (0) | 2021.12.11 |
[JAVA][Android] 간단한 위젯 만들기 (0) | 2021.12.08 |