Jak zkopírovat text programově v mé aplikaci pro Android?

hlasů
181

Stavím aplikaci pro systém Android a chci-li text zkopírovat hodnotu EDITTEXT widget. Je možné, aby uživatel stisknout Menu+Aa pak Menu+Czkopírovat hodnotu, ale jak bych to dělat programově?

Položena 26/10/2008 v 18:13
zdroj uživatelem
V jiných jazycích...                            


9 odpovědí

hlasů
325

http://developer.android.com/reference/android/content/ClipboardManager.html

Použít ClipboardManager.setPrimaryClipmetodu:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);
Odpovězeno 26/10/2008 v 18:20
zdroj uživatelem

hlasů
205

Takže všichni se shodují na tom, jak by to mělo být provedeno, ale protože nikdo chtít dát kompletní řešení, tady je:

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

Předpokládám, že máte něco jako následující deklarované v manifestu:

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
Odpovězeno 13/06/2012 v 10:56
zdroj uživatelem

hlasů
13

Googling vás přivedlo do android.content.ClipboardManager a ty by mohly rozhodnout, stejně jako já, že schránka není k dispozici API <11, protože stránka dokumentace říká: „Vzhledem k tomu: API Level 11“.

Existují vlastně dva druhy, druhá prodloužení první - android.text.ClipboardManager a android.content.ClipboardManager.

android.text.ClipboardManager je existující od API 1, ale to funguje pouze s textovým obsahem.

android.content.ClipboardManager je preferovaný způsob, jak pracovat se schránkou, ale to není k dispozici na úrovni API <11 (Honeycomb).

Chcete-li získat některý z nich budete potřebovat následující kód:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);

Ale pro API <11 budete muset dovážet android.text.ClipboardManagera API> = 11 android.content.ClipboardManager

Odpovězeno 30/03/2012 v 11:59
zdroj uživatelem

hlasů
12
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());
}

můžete zkusit to ..

Odpovězeno 31/10/2011 v 13:01
zdroj uživatelem

hlasů
7

Tady je nějaký kód implementovat některé funkce kopírování a vkládání z EDITTEXT (díky Warpzit pro kontrolu verze). Můžete připojit tyto na onclick případě vašeho tlačítka.

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());
        }
    }
}
Odpovězeno 11/11/2014 v 15:45
zdroj uživatelem

hlasů
4

K tomu, aby standardní kopírovat / vložit pro TextView, U si mohou vybrat jednu z následujících možností:

Změna souboru s rozložením: přidat níže majetek do svého TextView

android:textIsSelectable="true"

Ve třídě Java napsat tento řádek dva set gramaticky.

myTextView.setTextIsSelectable(true);

A dlouhým stiskem na TextView vidíte kopírovat / vložit akci bar.

Odpovězeno 05/08/2016 v 11:47
zdroj uživatelem

hlasů
2
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip);

a import import android.content.ClipboardManager;

Odpovězeno 12/12/2018 v 06:55
zdroj uživatelem

hlasů
2

@FlySwat již dal správnou odpověď, já jsem jen sdílení úplnou odpověď:

Použití ClipboardManager.setPrimaryClip ( http://developer.android.com/reference/android/content/ClipboardManager.html metoda):

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText("label", "Text to copy");
clipboard.setPrimaryClip(clip); 

Tam, kde label je štítek Uživatelsky mohou dat klipu a textje skutečný text v klipu. Podle oficiálních dokumentů .

Je důležité používat tento soubor:

import android.content.ClipboardManager;
Odpovězeno 18/04/2017 v 21:26
zdroj uživatelem

hlasů
1

kopírovat

Tato odpověď přidá dva řádky kódu na výbornou odpověď Warpzit to , že jsou nezbytné k potlačení kompilátoru upozornění o odmítání a nové API.

To vám umožní stále podporují zařízení nižší než API 11.

@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
private void copyText() {

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

Vložit

Jsem přidáním tento kód jako bonus, protože copy / paste se obvykle provádí v párech.

@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public void pasteText() {

    int sdk = android.os.Build.VERSION.SDK_INT;
    CharSequence pasteString = "";
    if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        try {
            pasteString = clipboard.getText();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboard.getPrimaryClip() != null) {
            android.content.ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
            pasteString = item.getText();
        }
    }

    if (pasteString != null) {
        // use it
    }
}
Odpovězeno 28/11/2016 v 04:40
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more