AndroidでTextViewの標準コピーペーストを有効にするにはどうすればよいですか?


119

TextViewの標準のコピー貼り付けを有効にしたい(EditTextと同じ)。どうすればできますか?

編集不可のEditTextを使用しようとしましたが、うまく機能しませんでした(編集可能になった、またはコピーペーストオーバーレイが表示されなかった場合があります)。そして、それはおそらく一般的に良いアプローチではありません。

API 7以降の実用的なソリューションが必要です。


これはあなたが探しているものですか?
Jermin Bazazian、2012

似ていますが、すべてのテキストをコピーしたいので同じではありません。しかし、それは同じに見えます。問題はそこに答えが唯一のAPI 11から始まる作品と私はAPI 7から働く何か必要があるということである
からIxx

ClipboardManagerAPI 1以降で利用可能です(こちらをご覧ください)。クリップボードにコピーするためのポップアップで長押しはどうですか?
Jermin Bazazian、2012

@Jerminはい、カスタムソリューションを作成する必要があるようです。
Ixx

回答:


226

お試しくださいandroid:textIsSelectable

つまり、 android:textIsSelectable="true"


EditTextPreferenceに対してそれを行うことはできますか?
powder366

1
@ powder366:私はEditTextPreferenceすでにコピー/貼り付けをサポートしていると思います。それは確かに設定アプリにあるようです。
CommonsWare 2013年

実際にはバグのようです。Samsung 4.2.2デバイスに表示されます。Nexus7とNexus10は動作します。code.google.com/p/android/issues/detail?id=26008
powder366

この点に注意してください。テキストビューが最初に非表示になっていて、setVisibilityを使用してプログラムで表示している場合は、textView.setTextIsSelectable(true)を使用してこれを機能させる必要があります。その場合、xml経由では機能しません。
Praveen Singh

58

TextViewの標準のコピー/貼り付けを有効にするために、Uは次のいずれかを選択できます。

  1. レイアウトファイルの変更:以下のプロパティをTextViewに追加します。

    android:textIsSelectable="true"

  2. Javaクラスでこの行を記述して、プログラムで設定します。 myTextView.setTextIsSelectable(true);

TextViewを長押しすると、コピー/貼り付けのアクションバーが表示されます。


1
私はそうします。テキストをクリックすると、「コピー」ボタンと「すべて選択」ボタンが開いたツールバーが表示されます。しかし、私がそれらをクリックした後、何も起こりません。私に何ができる?
ミナダヘシュ2016

2
この解決策は、緑色のチェックマークで正しいとマークされている解決策よりも優れています。
Adam Hurwitz、2016

21

これはプリハニカムのコピーで機能します:

import android.text.ClipboardManager;

textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ClipboardManager cm = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
        cm.setText(textView.getText());
        Toast.makeText(context, "Copied to clipboard", Toast.LENGTH_SHORT).show();
    }
});

4
CommonsWareの回答と共にこれを使用するのが良い戦略です。android:textIsSelectableレイアウトにライブを追加するため、下位のAPIレベルでは無視されます。次に、APIレベルが11未満かどうかを確認するifステートメント内でIxxのソリューションを使用します。両方の長所があります。良い点android:textIsSelectableは、プラットフォームのテキスト選択アクションバーを提供し、素晴らしいネイティブ感があることです。
emil10001 2012

1
タイプClipboardManagerのメソッドsetText(CharSequence)は非推奨になりました
S.M_Emamian

1
はい、まあ、この答えは2年以上前からです。新しいものを編集または追加してください。
Ixx

11

API 11が必要、更新されたコード、以前の方法は廃止予定

なしのテーマ全画面のソリューション ActionBar

TextView以下のコードを拡張してコンストラクタに貼り付けます

this.setOnLongClickListener(new OnLongClickListener() {

            @Override
            public boolean onLongClick(View v) {
                ClipboardManager cManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
                ClipData cData = ClipData.newPlainText("text", getText());
                cManager.setPrimaryClip(cData);
                Util.toast(mContext, string.text_copyed);
                return true;
            }
        });

9

xml textviewにこのコードを貼り付けます

android:textIsSelectable="true"

次に、Javaファイルで、

 final TextView txtcopypaste = findViewById(R.id.txtcopypaste); // my textview
    txtcopypaste.setOnClickListener(new View.OnClickListener() { // set onclick listener to my textview
        @Override
        public void onClick(View view) {
            ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
            cm.setText(txtcopypaste.getText().toString());              
            Toast.makeText(getApplicationContext(), "Copied :)", Toast.LENGTH_SHORT).show();
        }
    });

要件:テキストビューにあるテキストをコピーして貼り付ける必要があります。

OutCome:textviewを使用して、textviewをクリックした後。そのテキストビューにあるテキストを自動的にコピーしました。

注:クリップボードマネージャーのインポート中は、

テキストクリップボードマネージャーを優先してください

import android.text.ClipboardManager; // prefer this 

コンテンツクリップボードマネージャーを回避しよう

import android.content.ClipboardManager; // Not this

3
  1. テーマを使用

    @android:style/Theme.Black.NoTitleBar.Fullscreen

    または

    @android:style/Theme.WithActionBar
  2. TextViewをXMLに設定する

    android:textIsSelectable="true"
  3. 結果を見る


3

誰かがさらに一歩進んで、ワンクリックで選択してクリップボードにコピーしたい場合:

 phone.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
                            ClipData clip = ClipData.newPlainText("PhoneNumber", phone.getText());
                            clipboard.setPrimaryClip(clip);

                        }
                    });

phoneはTextViewで、phone.Textはクリップボードにコピーされるテキストです。


0

これは良いです:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final android.content.ClipboardManager clipboardManager = (android.content.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
final android.content.ClipData clipData = android.content.ClipData
        .newPlainText("text label", "text to clip");
clipboardManager.setPrimaryClip(clipData);
} else {
final android.text.ClipboardManager clipboardManager = (android.text.ClipboardManager) context
        .getSystemService(Context.CLIPBOARD_SERVICE);
clipboardManager.setText("text to clip");
}

-2

の場合、EditTextアクティビティ内部のマニフェストで android:windowSoftInputMode="adjustResize"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.