내 Android 앱에서 프로그래밍 방식으로 텍스트를 복사하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/238284

  •  04-07-2019
  •  | 
  •  

문제

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);

ClipboardManager API 참조

다른 팁

따라서 모든 사람은 이것이 어떻게 해야하는지에 동의하지만, 아무도 완전한 해결책을 제시하고 싶지 않기 때문에 여기에 간다.

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" />

Googling은 Android.content.clipboardmanager로 연결되며 문서 페이지가 "이후 : API 레벨 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 지원 라이브러리 업데이트

Android Oreo의 현재 지원 라이브러리는 API 14로만 내려갑니다. 대부분의 최신 앱은 아마도 최소 API가 14의 최소 API를 가질 수 있으므로 다른 답변 중 일부에 언급 된 API 11의 문제에 대해 걱정할 필요가 없습니다. 많은 코드를 정리할 수 있습니다. (하지만 여전히 낮은 버전을 지원하고 있다면 내 편집 기록을 참조하십시오.)

복사

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("label", selectedText);
if (clipboard == 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. 더 읽기 쉬운 방법을 찾으면 각각을 확인할 수 있습니다.

TextView의 표준 복사/붙여 넣기를 활성화하려면 다음 중 하나를 선택할 수 있습니다.

레이아웃 파일 변경 : 텍스트보기에 아래 속성을 추가하십시오.

android:textIsSelectable="true"

Java 클래스 에서이 줄은 문법적으로 설정합니다.

myTextView.setTextIsSelectable(true);

텍스트 뷰를 긴 누르면 복사/페이스트 액션 바를 볼 수 있습니다.

@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;
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

그리고 수입 import android.content.ClipboardManager;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top