Android 앱을 만들고 있는데 EditText 위젯의 텍스트 값을 복사하고 싶습니다. 사용자가 누른 Menu+A
다음 을 눌러 Menu+C
값을 복사 할 수 있지만 프로그래밍 방식으로 어떻게해야합니까?
Android 앱을 만들고 있는데 EditText 위젯의 텍스트 값을 복사하고 싶습니다. 사용자가 누른 Menu+A
다음 을 눌러 Menu+C
값을 복사 할 수 있지만 프로그래밍 방식으로 어떻게해야합니까?
답변:
사용 ClipboardManager#setPrimaryClip
방법 :
import android.content.ClipboardManager;
// ...
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
import android.content.ClipboardManager;
label
?
Context context = getApplicationContext(); Toast.makeText(context, "text copied", Toast.LENGTH_LONG).show();
따라서 모든 사람들이 이것이 어떻게 수행되어야하는지에 동의하지만 아무도 완벽한 솔루션을 제공하기를 원하지 않기 때문에 다음과 같습니다.
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" />
label
있는 newPlainText
방법은? 문서 상태 label User-visible label for the clip data.
. 그러나 언제 label
사용자에게 표시됩니까? 그리고 어떤 종류의 가치 / 이름을 넣어야 label
합니까?
인터넷 검색은 android.content.ClipboardManager로 연결되며 문서 페이지에 "Since : API Level 11"이라고 표시되어 있기 때문에 API <11에서 클립 보드를 사용할 수 없음을 결정할 수 있습니다.
실제로 두 개의 클래스가 있는데, 두 번째 클래스는 첫 번째 클래스 인 android.text.ClipboardManager와 android.content.ClipboardManager입니다.
android.text.ClipboardManager는 API 1부터 존재하지만 텍스트 내용에서만 작동합니다.
android.content.ClipboardManager는 클립 보드 작업에 선호되는 방법이지만 API 레벨 <11 (Honeycomb)에서는 사용할 수 없습니다.
그들 중 하나를 얻으려면 다음 코드가 필요합니다.
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
그러나 API <11의android.text.ClipboardManager
경우 가져와 API> = 11 을 가져와야합니다. android.content.ClipboardManager
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에 감사함). 이것들을 버튼의 onclick 이벤트에 연결할 수 있습니다.
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());
}
}
}
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
. 더 읽기 쉬운 방법을 찾으면 각각을 확인할 수 있습니다.@ FlySwat은 이미 정답을 제시했습니다. 완전한 답변을 공유하고 있습니다.
ClipboardManager.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);
label
클립 데이터에 대한 사용자가 볼 수있는 레이블은 어디에 있으며 클립
text
의 실제 텍스트입니다. 공식 문서 에 따르면 .
이 가져 오기를 사용해야합니다.
import android.content.ClipboardManager;
여기 내 작업 코드가 있습니다
/**
* 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);
}
}
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)
}
context.
내가 조각 내에서하고 있어요 때문에 될 수 - 내가 누락 된 일부였다.