webentwicklung-frage-antwort-db.com.de

Was genau ist der Parameter "label" in ClipData in Android?

ClipData verwendet laut Android documentation "label" als eine Art Darstellung der kopierten Daten.

ClippedData ist ein komplexer Typ, der eine oder mehrere Objektinstanzen enthält, von denen jede eine oder mehrere Darstellungen eines Datenobjekts enthalten kann. Zur Anzeige für den Benutzer verfügt es auch über eine Beschriftung und eine ikonische Darstellung.

Und dann wird "label" in einigen API-Dokumenten als vom Benutzer sichtbare Bezeichnung für die Clip-Daten erklärt. Ich bin jedoch immer noch verwirrt über die Verwendung des Etiketts.

Wie ist dieses Label für Benutzer sichtbar? Wie soll ich es benutzen? Was muss ich für dieses Label einstellen, wenn ich die ClipData-Factory-Methode newPlainText(CharSequence label, CharSequence text) aufrufe? beispielsweise:

private void copyToClipBoard() {

    ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
    ClipData clip = ClipData.newPlainText(
            "text label", // What should I set for this "label"?
            "content to be copied");
    clipboard.setPrimaryClip(clip);
    Toast.makeText(AboutActivity.this, "Saved to clip board", Toast.LENGTH_SHORT).show();
}
54
hackjutsu
ClipData clip = ClipData.newPlainText(
            "text label", 
            "content to be copied");

hier beschreibt die Beschriftung, welche Daten sich im Clip befinden

z.B.

ClipData clip = ClipData.newPlainText(
            "user Name",
            user.getName()); 

wir können dies mit abrufen

clip.getDescription ();
55
Gaurav

Es scheint, als sollte die Beschreibung "Vom Benutzer sichtbare Bezeichnung für die Clipdaten" in der Dokumentation als etwas interpretiert werden, das Sie als Entwickler festlegen und dem Benutzer dann selbst anzeigen können, und nicht als etwas, das das System Android aufweist wird dem Benutzer zeigen.

Beim Betrachten des Android-Quellcodes scheint die ClipDescription.getLabel () -Methode vor Android 5.0 nicht verwendet worden zu sein. In 5.0 RemoteInput , RemoteInputCompatJellybean und com.Android.mail.compose.ComposeActivity angegeben nter Verwendung der Methode .

Wenn Sie sich die Verwendung ansehen, legen Sie mit all diesen Angaben eine Beschriftung fest, die nicht für den Benutzer sichtbar ist, sondern zur programmgesteuerten Identifizierung des Clips an einer anderen Stelle im Code verwendet wird.

Wenn Sie sich ansehen, wie ClipData.newPlainText () verwendet wird in Android, wird meistens null als Label angegeben, was darauf hindeutet, dass das Label für nichts wirklich verwendet wird.

Es ist natürlich möglich, dass ein Telefonhersteller oder ein anderer App-Entwickler das Etikett nimmt und es dem Benutzer in bestimmten Situationen anzeigt. Grundsätzlich sollte jedoch davon ausgegangen werden, dass das Label eines Clips dem Benutzer in Ihrer App nur angezeigt wird, wenn Sie es selbst anzeigen.

21
nibarius

Heute habe ich bei der Arbeit an meiner App einen Anwendungsfall für das ClipData-Label entdeckt. Einige Apps setzen es auf null, während andere Apps es ziemlich häufig verwenden.

Bei meiner App höre ich den ClipManager addPrimaryClipChangedListener

Ich mache das in einer Serviceklasse, die fast die ganze Zeit im Hintergrund läuft. Ich möchte Daten, die dem primaryClip in meiner App hinzugefügt wurden, anders behandeln als Daten, die in einer anderen App hinzugefügt wurden (z. B. Text, der in einem Webbrowser kopiert wurde).

Hier ist ein Auszug aus meinem Code und wie ich ClipData-Label verwende:

mClipBoardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
            @Override
            public void onPrimaryClipChanged() {
                String clipLabel = "default";
                if (mClipBoardManager.getPrimaryClip().getDescription().getLabel() != null) {
                    clipLabel = mClipBoardManager.getPrimaryClip().getDescription().getLabel().toString();
                }
                if (clipLabel.equals("auto_copy_text")) {
                    //TODO: Text from my app do stuffs you will do with text from my app
                } else {
                    //TODO: Text from some other app
                }

            }
        });

Wenn ich Daten zu primaryClip hinzufüge, füge ich in meine App die folgende Bezeichnung ein:

private void addToClipboard(String text) {
        mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
        mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text));
    }

Ich hoffe das hilft

0
Eaweb