목차
복사-붙여넣기 도우미 클래스 ClipboardHelper:
1. 소개
(하나)ClipboardManager介绍
ClipboardManager
클립보드 내용 관리를 위해 안드로이드에서 제공하는 시스템 서비스입니다. 애플리케이션 간에 텍스트, 링크, 이미지 등의 데이터를 복사하여 붙여넣을 수 있습니다.
1、ClipboardManager
일반적으로 사용되는 방법:
setPrimaryClip(ClipData clip)
: 지정한ClipData
개체를 클립보드 메인 내용으로 설정합니다. 텍스트, 링크, 이미지 등을 클립보드에 복사하는 데 사용할 수 있습니다.
ClipData clipData = ClipData.newPlainText("label", "要复制的文本");
clipboardManager.setPrimaryClip(clipData);
getPrimaryClip()
: 메인 클립보드의 내용을 가져옵니다.ClipData
기본 클립보드의 데이터가 포함된 객체를 반환합니다 .
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
// 处理剪贴板内容
}
hasPrimaryClip()
: 메인 클립보드에 내용이 있는지 확인하세요. 클립보드에 데이터가 포함되어 있으면 반환하고,true
그렇지 않으면 를 반환합니다false
.
if (clipboardManager.hasPrimaryClip()) {
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
CharSequence text = clipData.getItemAt(0).getText();
// 使用获取到的文本进行操作
}
}
addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener)
: 클립보드 내용이 변경될 때 알림을 받을 수 있도록 클립보드 변경 리스너를 등록합니다.
clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
// 剪贴板内容发生变化时执行相关操作
}
});
2. 받기 ClipboardManager实例
ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
(二)、ClipData介绍
ClipData
Android에서 클립보드에 데이터를 저장하는 데 사용되는 클래스입니다. 이는 하나 이상의 ClipData.Item
개체를 포함할 수 있는 불변의 데이터 컨테이너이며, 각 개체는 클립보드 콘텐츠 항목을 나타냅니다.
1. ClipData
객체 생성:
ClipData
클래스의 정적 메서드를 사용하거나 newPlainText()
새 newUri()
개체를 만들 수 있습니다 ClipData
.
newPlainText(CharSequence label, CharSequence text)
: 일반 텍스트ClipData
개체를 만듭니다. 클립보드에 복사할 라벨(label)과 텍스트 내용(text)을 제공해야 합니다.
CharSequence label = "Label";
CharSequence text = "要复制的文本";
ClipData clipData = ClipData.newPlainText(label, text);
newUri(ContentResolver resolver, CharSequence label, Uri uri)
: URI를 포함하는ClipData
객체를 생성합니다. 클립보드에 복사하려면 레이블, ContentResolver 및 URI를 제공해야 합니다.
CharSequence label = "Label";
Uri uri = Uri.parse("https://example.com");
ClipData clipData = ClipData.newUri(getContentResolver(), label, uri);
2. ClipData
획득한 정보:
ClipData
개체에는 클립보드의 데이터가 포함되어 있습니다. 다음 방법을 사용하여 ClipData
콘텐츠에 액세스하고 조작할 수 있습니다.
getItemCount()
:ClipData
에 포함된ClipData.Item
항목 수( )를 가져옵니다 .
int itemCount = clipData.getItemCount();
getItemAt(int index)
: 지정된 인덱스의 값을 가져옵니다ClipData.Item
.
ClipData.Item item = clipData.getItemAt(index);
3、ClipData.Item
물체:
ClipData.Item
텍스트, 링크 또는 기타 데이터일 수 있는 클립보드의 항목을 나타냅니다. ClipData
메소드를 통해 각 객체에 액세스하고 조작할 수 있습니다 Item
.
getText()
:ClipData.Item
텍스트 내용을 가져옵니다.
CharSequence text = item.getText();
getUri()
:ClipData.Item
URI를 검색하는 중입니다.
Uri uri = item.getUri();
2. 예시
복사-붙여넣기 도우미 클래스 ClipboardHelper:
package com.example.stardemo;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
public class ClipboardHelper {
private Context context;
private ClipboardManager clipboardManager;
public ClipboardHelper(Context context) {
this.context = context;
clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
}
/**
* 将文本复制到剪贴板
*
* @param text 要复制的文本
*/
public void copyText(String text) {
ClipData clipData = ClipData.newPlainText("text", text);
clipboardManager.setPrimaryClip(clipData);
}
/**
* 从剪贴板获取文本
*
* @return 剪贴板中的文本
*/
public String getCopiedText() {
if (clipboardManager.hasPrimaryClip()) {
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData != null && clipData.getItemCount() > 0) {
CharSequence text = clipData.getItemAt(0).getText();
return text.toString();
}
}
return null;
}
}
주요 활동:
package com.example.stardemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView copeText,pasteText;
ClipboardHelper mClipboardHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
copeText = findViewById(R.id.copyText);
pasteText = findViewById(R.id.pasteText);
mClipboardHelper = new ClipboardHelper(this);
copeText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClipboardHelper.copyText(copeText.getText().toString());
Toast.makeText(MainActivity.this, "复制成功", Toast.LENGTH_SHORT).show();
}
});
pasteText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
pasteText.setText(mClipboardHelper.getCopiedText());
Toast.makeText(MainActivity.this, "粘贴成功", Toast.LENGTH_SHORT).show();
}
});
}
}
여기에는 두 개의 TextView
: copyText
및 가 포함되어 있습니다 pasteText
. 클릭하면 클래스를 copyText
사용하여 ClipboardHelper
텍스트를 클립보드에 복사하고 복사가 성공했음을 나타내는 토스트 메시지를 표시합니다. 클릭하면 pasteText
클립보드에서 복사된 텍스트를 가져와서 pasteText
의 텍스트로 설정합니다.
활동_주요:
<?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/copyText"
android:layout_width="115dp"
android:layout_height="100dp"
android:gravity="center"
android:text="Hello World!"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textColor="@color/black"
app:layout_constraintVertical_bias="0.234" />
<TextView
android:id="@+id/pasteText"
android:background="@color/teal_200"
android:textColor="@color/black"
android:layout_width="115dp"
android:layout_height="100dp"
android:gravity="center"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.551" />
</androidx.constraintlayout.widget.ConstraintLayout>