163

ボタンを押したときに特定のテキストビューにあるテキストをクリップボードにコピーする方法を教えてもらえますか? ありがとう:)私はボタンBCOPYが押されたときにクリップボードへのTextViewのTextViewのテキストをコピーしたいAndroidのクリップボードにテキストをコピーする方法は?

@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 :) 





     } 
    }); 
} 

}

!ヘルプをしてください...

+0

可能性のある重複した[私のAndroidアプリでプログラムテキストをコピーするには?](http://stackoverflow.com/questions/238284/how-to-copy-text-programmatically-in-my-android -app) –

+0

https://stackoverflow.com/q/48791271/9274175 coppyでこの質問にお答えください –

答えて

290

使用ClipboardManager

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); 
ClipData clip = ClipData.newPlainText(label, text); 
clipboard.setPrimaryClip(clip); 

あなたはandroid.content.ClipboardManagerとNOT android.text.ClipboardManagerを輸入していることを確認してください。後者は推奨されていません。 詳細については、linkをご確認ください。

+3

これはAPI11専用です.GB以下では動作しません。 – Javier

+0

@zen私はGB用に "setText"を使うことができると思います。 –

+0

import 'android.content.ClipboardManager'と***ではありません*** android.text.ClipboardManager'(私は 'android.text.ClipboardManager'が廃止されました' warning) – Atul

53

昨日私はこのクラスを作った。それを取る、それはすべての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 ""; 
    } 

} 
+0

このクラスを機能させるために必要なimport文を追加できますか? – merlin2011

+0

@ merlin2011それは、私がcoerceToText(...)メソッドを忘れたと思う。 Sry for that –

+0

"coerceToText"とは何ですか?他のタイプのデータをクリップボードにコピー/ペーストすることもできますか(例:ビットマップ)? –

10

ただ、これを使用のためです。これは、あなたがClipDataを使用する必要がある前にアンドロイドapi> = 11のためにのみ動作します。

ClipboardManager _clipboard = (ClipboardManager) _activity.getSystemService(Context.CLIPBOARD_SERVICE); 
_clipboard.setText(YOUR TEXT); 

は、それがメソッドsetTextsetPrimaryClip(clipData)、ドキュメントはそれをRECOMMANDE同じように、あなたが使用する必要があり、現在は非推奨されただけでUjjwal Singhのように[UPDATE 2015年3月19日] それはあなたを助けた:)

ホープ

ここ
+0

エラーを表示しています_activityを解決できません。 –

+1

正確にはどんなエラーですか?投稿できますか? – Ektos974

+0

"_activityを解決できません" –

6
@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(); 
    } 
} 
41

テキストをクリップボードにコピーする方法:

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

この方法はすべてのアンドロイドデバイスで機能しています。

+1

「コンテキスト」の意味がわからない。そのメソッドを適切に呼び出す方法の例を追加できますか?ありがとう。 –

+1

また、 "context"の値が使用されていないように見えます。それでなぜそれをパラメータとして渡す必要がありますか? –

+0

@E_Blue返信ありがとう、私は今編集中です – vuhung3990

5

使用このコード

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(); 
     } 
    }); 
} 
+0

ありがとう、非常に使いやすいです。 – kdblue

5

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"); 
} 
+0

それは私のために働く。非常にシンプルでクリーンな、ありがとう –

0

int型SDK = android.os.Build.VERSION.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(); 
    } 
関連する問題