Как Скопировать текст на клипборд в Android?
может ли кто-нибудь сказать мне, как Скопировать текст, присутствующий в определенном textview в буфер обмена при нажатии кнопки? Спасибо :)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainpage);
textView = (TextView) findViewById(R.id.textview);
copyText = (Button) findViewById(R.id.bCopy);
copyText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
String getstring = textView.getText().toString();
//Help to continue :)
}
});
}
}
Я хочу Скопировать текст в TextView textView в буфер обмена при нажатии кнопки bCopy! Пожалуйста, помогите...
10 ответов:
использовать ClipboardManager
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText(label, text); clipboard.setPrimaryClip(clip);
убедитесь, что вы импортировали
android.content.ClipboardManager
, а неandroid.text.ClipboardManager
. Последний является устаревшим. Проверьте это ссылке для получения дополнительной информации.
вчера я сделал этот класс. Возьмите его, это для все уровни API
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import android.annotation.SuppressLint; import android.content.ClipData; import android.content.ClipboardManager; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.net.Uri; import android.util.Log; import de.lochmann.nsafirewall.R; public class MyClipboardManager { @SuppressLint("NewApi") @SuppressWarnings("deprecation") public boolean copyToClipboard(Context context, String text) { try { int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); clipboard.setText(text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText( context.getResources().getString( R.string.message), text); clipboard.setPrimaryClip(clip); } return true; } catch (Exception e) { return false; } } @SuppressLint("NewApi") public String readFromClipboard(Context context) { int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); return clipboard.getText().toString(); } else { ClipboardManager clipboard = (ClipboardManager) context .getSystemService(Context.CLIPBOARD_SERVICE); // Gets a content resolver instance ContentResolver cr = context.getContentResolver(); // Gets the clipboard data from the clipboard ClipData clip = clipboard.getPrimaryClip(); if (clip != null) { String text = null; String title = null; // Gets the first item from the clipboard data ClipData.Item item = clip.getItemAt(0); // Tries to get the item's contents as a URI pointing to a note Uri uri = item.getUri(); // If the contents of the clipboard wasn't a reference to a // note, then // this converts whatever it is to text. if (text == null) { text = coerceToText(context, item).toString(); } return text; } } return ""; } @SuppressLint("NewApi") public CharSequence coerceToText(Context context, ClipData.Item item) { // If this Item has an explicit textual value, simply return that. CharSequence text = item.getText(); if (text != null) { return text; } // If this Item has a URI value, try using that. Uri uri = item.getUri(); if (uri != null) { // First see if the URI can be opened as a plain text stream // (of any sub-type). If so, this is the best textual // representation for it. FileInputStream stream = null; try { // Ask for a stream of the desired type. AssetFileDescriptor descr = context.getContentResolver() .openTypedAssetFileDescriptor(uri, "text/*", null); stream = descr.createInputStream(); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); // Got it... copy the stream into a local string and return it. StringBuilder builder = new StringBuilder(128); char[] buffer = new char[8192]; int len; while ((len = reader.read(buffer)) > 0) { builder.append(buffer, 0, len); } return builder.toString(); } catch (FileNotFoundException e) { // Unable to open content URI as text... not really an // error, just something to ignore. } catch (IOException e) { // Something bad has happened. Log.w("ClippedData", "Failure loading text", e); return e.toString(); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { } } } // If we couldn't open the URI as a stream, then the URI itself // probably serves fairly well as a textual representation. return uri.toString(); } // Finally, if all we have is an Intent, then we can just turn that // into text. Not the most user-friendly thing, but it's something. Intent intent = item.getIntent(); if (intent != null) { return intent.toUri(Intent.URI_INTENT_SCHEME); } // Shouldn't get here, but just in case... return ""; } }
вот способ копирования текста в буфер обмена:
private void setClipboard(Context context, String text) { if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); clipboard.setPrimaryClip(clip); } }
этот метод работает на всех устройствах Android.
просто использовать это. Он работает только для Android api >= 11 перед этим вам придется использовать ClipData.
ClipboardManager _clipboard = (ClipboardManager) _activity.getSystemService(Context.CLIPBOARD_SERVICE); _clipboard.setText(YOUR TEXT);
надеюсь, что это помогло вам :)
[обновление 3/19/2015] Так же, как Ujjwal Сингх сказал, что это метод
setText
теперь устарело, вы должны использовать, так же, как документы рекомендуют его,setPrimaryClip (clipData)
@SuppressLint({ "NewApi", "NewApi", "NewApi", "NewApi" }) @SuppressWarnings("deprecation") @TargetApi(11) public void onClickCopy(View v) { // User-defined onClick Listener int sdk_Version = android.os.Build.VERSION.SDK_INT; if(sdk_Version < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(textView.getText().toString()); // Assuming that you are copying the text from a TextView Toast.makeText(getApplicationContext(), "Copied to Clipboard!", Toast.LENGTH_SHORT).show(); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Text Label", textView.getText().toString()); clipboard.setPrimaryClip(clip); Toast.makeText(getApplicationContext(), "Copied to Clipboard!", Toast.LENGTH_SHORT).show(); } }
используйте эту функцию для копирования в буфер обмена
public void copyToClipboard(String 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(copyText); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText("Your OTP", copyText); clipboard.setPrimaryClip(clip); } Toast toast = Toast.makeText(getApplicationContext(), "Your OTP is copied", Toast.LENGTH_SHORT); toast.setGravity(Gravity.BOTTOM | Gravity.RIGHT, 50, 50); toast.show(); //displayAlert("Your OTP is copied"); }
используйте этот код
private ClipboardManager myClipboard; private ClipData myClip; TextView textView; Button copyText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainpage); textView = (TextView) findViewById(R.id.textview); copyText = (Button) findViewById(R.id.bCopy); myClipboard = (ClipboardManager)getSystemService(CLIPBOARD_SERVICE); copyText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String text = textView.getText().toString(); myClip = ClipData.newPlainText("text", text); myClipboard.setPrimaryClip(myClip); Toast.makeText(getApplicationContext(), "Text Copied", Toast.LENGTH_SHORT).show(); } }); }
Это можно сделать в Котлине так:
var clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager var clip = ClipData.newPlainText("label", file.readText()) clipboard.primaryClip = clip
здесь
file.readText()
- это входная строка.
как удобное расширение kotlin:
fun Context.copyToClipboard(text: CharSequence){ val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val clip = ClipData.newPlainText("label",text) clipboard.primaryClip = clip }
int sdk = android.ОС.Строить.ВЕРСИЯ.SDK_INT;
if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) DetailView.this .getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText("" + yourMessage.toString()); Toast.makeText(AppCstVar.getAppContext(), "" + getResources().getString(R.string.txt_copiedtoclipboard), Toast.LENGTH_SHORT).show(); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) DetailView.this .getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText("message", "" + yourMessage.toString()); clipboard.setPrimaryClip(clip); Toast.makeText(AppCstVar.getAppContext(), "" + getResources().getString(R.string.txt_copiedtoclipboard), Toast.LENGTH_SHORT).show(); }