如何將文字複製到剪貼簿(clipboard)

如何將文字複製到剪貼簿(clipboard)

情境

Android提供一個簡便的方式可以把文字存到剪貼簿
再透過程式將複製的內容貼到想要呈現的地方

程式碼說明

首先安排一個輸入框EditText, 以及三個Button來執行我們的動作。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
     >

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/edit_text"
        android:id="@+id/edit_text" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/copy"
        android:id="@+id/copy_btn"
        />
    <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/paste"
        android:id="@+id/paste_btn"
        />
    <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/clear"
        android:id="@+id/clear_btn"
        />
</LinearLayout>

接著我們寫兩個方法, 分別是把文字複製進剪貼簿以及把文字從剪貼簿內取出來。

private void copyToClipboard(String str){
    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(str);
        Log.e("version","1 version");
    } else {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
        android.content.ClipData clip = android.content.ClipData.newPlainText("text label",str);
        clipboard.setPrimaryClip(clip);
        Log.e("version","2 version");
    }
}

private String copyFromClipboard(){
    int sdk = android.os.Build.VERSION.SDK_INT;
    if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) {
        android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < clipboard.getPrimaryClip().getItemCount(); i++){
            sb.append(clipboard.getPrimaryClip().getItemAt(i).getText());
        }
        return sb.toString();
    } else {
        android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        return clipboard.getText().toString();
    }

}

由上面我們可以看出, 我們有進行版本的判斷, 原因出在複製到剪貼簿的方法在API 11之後, 有更新方法, 因此舊版的方法被標示為Deprecated。

copyBtn.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        copyToClipboard(editText.getText().toString());
        Toast.makeText(MainActivity.this, "複製到剪貼簿", Toast.LENGTH_SHORT).show();
    }

});
pasteBtn.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        editText.setText(editText.getText().append(copyFromClipboard()));
    }

});
clearBtn.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        editText.setText("");
    }

});

接著我們對三個Button寫入相對應的事件, 就可以完成這次的功能了。
清除


貼上

github