Android 앱에서 텍스트를 프로그래밍 방식으로 복사하는 방법은 무엇입니까?
안드로이드 앱을 만들고 있는데 텍스트 편집 위젯의 텍스트 값을 복사하고 싶습니다.사용자가 를 누를 수 있습니다.Menu+A
그리고나서Menu+C
값을 복사하려면 어떻게 해야 합니까?
사용 방법:
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
따라서 모든 사람이 이 작업을 수행하는 방법에 대해 동의하지만, 아무도 완벽한 솔루션을 제공하고 싶어하지 않기 때문에 다음과 같이 말합니다.
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("text to clip");
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("text label","text to clip");
clipboard.setPrimaryClip(clip);
}
나는 당신이 다음과 같은 것을 매니페스트에 선언했다고 가정합니다.
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
Google은 Android.content로 이동합니다.설명서 페이지에 "Since: API Level 11"이 표시되기 때문에 클립보드 관리자와 당신은 저와 마찬가지로 클립보드를 API < 11에서 사용할 수 없다고 결정할 수 있습니다.
실제로 두 가지 클래스가 있습니다. 두 번째 클래스는 첫 번째 클래스인 Android.text를 확장합니다.클립보드 관리자 및 Android.content.클립보드 관리자.
안드로이드.텍스트Clipboard Manager는 API 1 이후에 존재하지만 텍스트 콘텐츠에서만 작동합니다.
안드로이드.콘텐츠클립보드 관리자는 클립보드로 작업하는 데 선호되는 방법이지만 API 레벨 < 11(Honeycomb)에서는 사용할 수 없습니다.
이러한 코드를 가져오려면 다음 코드가 필요합니다.
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
그러나 API < 11의 경우에는 Import해야 합니다.android.text.ClipboardManager
API > = 11의 경우 android.content.ClipboardManager
Android 지원 라이브러리 업데이트
Android Oreo의 경우 지원 라이브러리는 API 14로만 내려갑니다.대부분의 최신 앱은 최소 API가 14이므로 다른 답변에서 언급한 API 11 문제에 대해 걱정할 필요가 없습니다.많은 코드를 정리할 수 있습니다. (그러나 여전히 하위 버전을 지원하는 경우에는 내 편집 기록을 참조하십시오.)
알았다.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == null || clip == null) return;
clipboard.setPrimaryClip(clip);
붙여넣기
복사/붙여넣기는 보통 쌍으로 하기 때문에 보너스로 이 코드를 추가합니다.
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
try {
CharSequence text = clipboard.getPrimaryClip().getItemAt(0).getText();
} catch (Exception e) {
return;
}
메모들
- 다음 항목을 가져오십시오.
android.content.ClipboardManager
오래된 버전이 아닌 버전android.text.ClipboardManager
에도 마찬가지입니다.ClipData
. - 활동 중이 아닌 경우 서비스를 받을 수 있습니다.
context.getSystemService()
. - 여러 가지가 있을 수 있기 때문에 붙여넣기 텍스트를 얻기 위해 시도/캐치 블록을 사용했습니다.
null
더 읽기 쉬운 방법으로 각 항목을 확인할 수 있습니다.
public void onClick (View v)
{
switch (v.getId())
{
case R.id.ButtonCopy:
copyToClipBoard();
break;
case R.id.ButtonPaste:
pasteFromClipBoard();
break;
default:
Log.d(TAG, "OnClick: Unknown View Received!");
break;
}
}
// Copy EditCopy text to the ClipBoard
private void copyToClipBoard()
{
ClipboardManager clipMan = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipMan.setPrimaryClip(editCopy.getText());
}
당신은 이것을 시도할 수 있습니다.
EditText의 일부 복사 및 붙여넣기 기능을 구현하기 위한 코드가 있습니다(버전 확인을 위한 Warpzit 덕분).단추의 클릭 시 이벤트에 연결할 수 있습니다.
public void copy(View v) {
int startSelection = txtNotes.getSelectionStart();
int endSelection = txtNotes.getSelectionEnd();
if ((txtNotes.getText() != null) && (endSelection > startSelection ))
{
String selectedText = txtNotes.getText().toString().substring(startSelection, endSelection);
int sdk = android.os.Build.VERSION.SDK_INT;
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText(selectedText);
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("WordKeeper",selectedText);
clipboard.setPrimaryClip(clip);
}
}
}
public void paste(View v) {
int sdk = android.os.Build.VERSION.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard.getText() != null) {
txtNotes.getText().insert(txtNotes.getSelectionStart(), clipboard.getText());
}
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
if (item.getText() != null) {
txtNotes.getText().insert(txtNotes.getSelectionStart(), item.getText());
}
}
}
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
그리고 가져오기 import android.content.ClipboardManager;
TextView에 대한 표준 복사/붙여넣기를 활성화하려면 다음 중 하나를 선택합니다.
레이아웃 파일 변경: TextView에 아래 속성 추가
android:textIsSelectable="true"
당신의 자바 수업에서 이 두 줄을 문법적으로 쓰시오.
myTextView.setTextIsSelectable(true);
텍스트 보기를 길게 누르면 복사/붙여넣기 수행 표시줄이 표시됩니다.
@FlySwat은 이미 정답을 제시했습니다. 전체 답변을 공유하고 있습니다.
클립보드 관리자를 사용합니다.setPrimaryClip(http://developer.android.com/reference/android/content/ClipboardManager.html) 메서드:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
에▁where디label
및 클립데사가볼자수있레이다니입블는대용이한에터▁the▁for▁data에 대한 사용자 표시 레이블입니다.text
클립의 실제 텍스트입니다.공식 문서에 따르면.
이 가져오기를 사용하는 것이 중요합니다.
import android.content.ClipboardManager;
Kotlin의 경우 다음 방법을 사용할 수 있습니다.이 메서드를 활동 또는 조각 내부에 붙여넣을 수 있습니다.
fun copyToClipBoard(context: Context, message: String) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",message)
clipBoard.setPrimaryClip(clipData)
}
Kotlin의 경우 활동 내부에 아래 코드를 사용합니다.
import android.content.ClipboardManager
val clipBoard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label","Message to be Copied")
clipBoard.setPrimaryClip(clipData)
또는 Kotlin 확장자를 작성
fun String.copyToClipboard(context: Context) {
val clipBoard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clipData = ClipData.newPlainText("label",this)
clipBoard.setPrimaryClip(clipData)
}
그리고 나서 전화합니다.
"stringToCopy".copyToClipboard(requireContext())
여기 제 작업 코드가 있습니다.
/**
* Method to code text in clip board
*
* @param context context
* @param text text what wan to copy in clipboard
* @param label label what want to copied
*/
public static void copyCodeInClipBoard(Context context, String text, String label) {
if (context != null) {
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText(label, text);
if (clipboard == null || clip == null)
return;
clipboard.setPrimaryClip(clip);
}
}
IME(기본 입력 방법 편집기) 또는 현재 포커스가 있는 앱이 아니면 Android 10 이상의 클립보드 데이터에 액세스할 수 없습니다.https://developer.android.com/about/versions/10/privacy/changes#clipboard-data
나는 이것을 사용합니다 (조각을 가지고 작업합니다)- 코틀리시한 방법.
private fun copyTextToClipboard(copyText: String) {
val clipboardManager = requireActivity().
getSystemService(CLIPBOARD_SERVICE) as
android.content.ClipboardManager
val clipData = ClipData.newPlainText("userLabel" ,copyText.trim())
clipboardManager.setPrimaryClip(clipData)
}
언급URL : https://stackoverflow.com/questions/238284/how-to-copy-text-programmatically-in-my-android-app
'programing' 카테고리의 다른 글
안드로이드 스튜디오에서 앱의 런처 로고를 어떻게 변경합니까? (0) | 2023.08.15 |
---|---|
다른 파일에서 사용할 외부 파이썬 코드를 포함하는 방법은 무엇입니까? (0) | 2023.08.15 |
스프링 액추에이터를 웹이 아닌 스프링 부트 애플리케이션과 함께 사용할 수 있습니까? (0) | 2023.08.15 |
jQuery를 사용하여 인터넷 연결이 있는지 확인하시겠습니까? (0) | 2023.08.15 |
엑셀에서 그룹별로 데이터를 계산하려면 어떻게 해야 합니까? (0) | 2023.08.15 |