programing

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

instargram 2023. 8. 15. 09:46
반응형

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

ClipboardManagerAPI 참조

따라서 모든 사람이 이 작업을 수행하는 방법에 대해 동의하지만, 아무도 완벽한 솔루션을 제공하고 싶어하지 않기 때문에 다음과 같이 말합니다.

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.ClipboardManagerAPI > = 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

반응형