Wie aktiviere ich das standardmäßige Einfügen von Kopien für eine Textansicht in Android?

118

Ich möchte das Einfügen von Standardkopien für eine Textansicht aktivieren (das gleiche wie für EditText). Wie kann ich es tun?

Ich habe versucht, einen nicht bearbeitbaren EditText zu verwenden, aber er hat nicht gut funktioniert (manchmal wurde er bearbeitbar oder das Overlay zum Einfügen von Kopien wurde nicht angezeigt). Und es ist wahrscheinlich im Allgemeinen kein guter Ansatz.

Benötigen Sie eine funktionierende Lösung ab API 7.

Ixx
quelle
Ist es das, wonach du suchst?
Jermin Bazazian
Es ist ähnlich, aber nicht dasselbe, weil ich den gesamten Text kopieren möchte. Aber es sieht genauso aus. Das Problem ist, dass die Antwort dort nur ab API 11 funktioniert und ich etwas brauche, das ab API 7 funktioniert.
Ixx
ClipboardManagerist seit API 1 verfügbar (siehe hier ). Wie wäre es mit langem Drücken mit einem Popup zum Kopieren in die Zwischenablage?
Jermin Bazazian
@Jermin Ja, anscheinend muss ich eine benutzerdefinierte Lösung erstellen.
Ixx

Antworten:

226

Versuchen Sie es android:textIsSelectable.

dh android:textIsSelectable="true"

CommonsWare
quelle
Kann man das für EditTextPreference machen?
Pulver366
1
@ Pulver366: Ich würde denken, dass EditTextPreferencedas Kopieren / Einfügen bereits unterstützt. Es scheint sicherlich in der Einstellungen App.
CommonsWare
Eigentlich scheint es ein Fehler zu sein. Wird auf meinem Samsung 4.2.2-Gerät angezeigt. Nexus7 und Nexus10 funktionieren. code.google.com/p/android/issues/detail?id=26008
Pulver366
Nur eine Anmerkung dazu: Wenn Ihre Textansicht anfänglich ausgeblendet ist und Sie sie programmgesteuert mit setVisibility anzeigen, müssen Sie textView.setTextIsSelectable (true) verwenden, damit dies funktioniert. In diesem Fall funktioniert es nicht über XML.
Praveen Singh
58

Um das Standard-Kopieren / Einfügen für TextView zu aktivieren, kann U eine der folgenden Optionen auswählen:

  1. Änderung in der Layoutdatei: Fügen Sie Ihrer TextView die folgende Eigenschaft hinzu

    android:textIsSelectable="true"

  2. Schreiben Sie in Ihre Java-Klasse diese Zeile, um sie programmgesteuert festzulegen. myTextView.setTextIsSelectable(true);

Wenn Sie lange auf die Textansicht drücken, wird die Aktionsleiste zum Kopieren / Einfügen angezeigt.

RamiReddy
quelle
1
ich mache das Wenn ich auf Texte klicke, öffnet sich die Symbolleiste mit den Schaltflächen "Kopieren" und "Alle auswählen". aber nachdem ich sie angeklickt habe, passiert nichts. Was kann ich tun?
Mina Dahesh
2
Diese Lösung ist besser als die mit dem grünen Häkchen als korrekt gekennzeichnete.
Adam Hurwitz
21

Dies funktioniert für Kopien vor Honeycomb:

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();
    }
});
Ixx
quelle
4
Eine gute Strategie wäre, dies zusammen mit der Antwort von CommonsWare zu verwenden. Da android:textIsSelectabledem Layout Leben hinzugefügt werden , wird es auf niedrigeren API-Ebenen nur ignoriert. Verwenden Sie dann die Lösung von Ixx in einer if-Anweisung, die prüft, ob die API-Ebene unter 11 liegt. Das Beste aus beiden Welten. Das Schöne daran android:textIsSelectableist, dass es Ihnen die Aktionsleiste für die Textauswahl der Plattform gibt und ein nettes natives Gefühl vermittelt.
emil10001
1
Die Methode setText (CharSequence) vom Typ ClipboardManager ist veraltet
S.M_Emamian
1
Ja, diese Antwort stammt von vor mehr als 2 Jahren. Fühlen Sie sich frei, eine neue zu bearbeiten oder hinzuzufügen.
Ixx
11

Benötigt API 11 , aktualisierter Code, vorherige Methode ist veraltet

Lösung für Thema Vollbild ohne ActionBar

Erweitern Sie den TextViewfolgenden Code und fügen Sie ihn im Konstruktor ein

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;
            }
        });
AZ_
quelle
9

Fügen Sie diesen Code in die XML-Textansicht ein

android:textIsSelectable="true"

Dann in Java-Datei,

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

Voraussetzung: Sie müssen den Text in der Textansicht kopieren und einfügen.

OutCome: Verwenden der Textansicht, sobald ich auf die Textansicht geklickt habe. Der Text in der Textansicht wird automatisch kopiert.

Hinweis: Versuchen Sie beim Importieren des Zwischenablage-Managers zu bevorzugen

Bitte bevorzugen Sie Text Zwischenablage Manager

import android.text.ClipboardManager; // prefer this 

Vermeiden Sie den Manager für die Zwischenablage von Inhalten

import android.content.ClipboardManager; // Not this
Agilanbu
quelle
3
  1. Thema verwenden

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

    oder

    @android:style/Theme.WithActionBar
  2. Stellen Sie TextView in XML ein

    android:textIsSelectable="true"
  3. siehe Ergebnis

Michael Mao
quelle
3

Wenn jemand die Extrameile gehen und mit einem Klick auswählen und in die Zwischenablage kopieren möchte:

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

                        }
                    });

Telefon ist die Textansicht und Telefon. Text ist der Text, der in die Zwischenablage kopiert wird.

narcis dpr
quelle
0

das ist besser:

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");
}
Jk sein
quelle
-1

Für ein EditText, in Manifest innerhalb der Aktivität verwenden android:windowSoftInputMode="adjustResize"

Rajeesh
quelle