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


79

Laut der Android- Dokumentation verwendet ClipData "label" als eine Art Darstellung der kopierten Daten.

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

Anschließend wird "label" als vom Benutzer sichtbares Label für die Clipdaten in einigen API-Dokumenten erläutert . Ich bin jedoch immer noch verwirrt über die Verwendung des Etiketts.

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

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

Antworten:


86
ClipData clip = ClipData.newPlainText(
            "text label", 
            "content to be copied");

Hier beschreibt die Textbezeichnung, welche Daten sich im Clip befinden

z.B.

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

Wir können dies mit abrufen

clip.getDescription ();

4
Bedeuten die Begriffe Userin den Dokumenten "Vom Benutzer sichtbares Etikett für die Clipdaten" tatsächlich die Entwickler anstelle der Benutzer der App? Ich sehe keinen Wert für die Benutzer der App, um dieses Label zu kennen ...
Hackjutsu

39
Label gibt es nur für Entwickler, nicht für App-Benutzer
Gaurav

3
Nett! Ich war verwirrt von der Beschreibung "Benutzer sichtbar" ... Aber jetzt ist es klar.
Hackjutsu

24

Es scheint, dass die Beschreibung "Vom Benutzer sichtbares Etikett für die Clipdaten" in der Dokumentation als etwas interpretiert werden sollte, das Sie als Entwickler festlegen und dann dem Benutzer selbst anzeigen können, und nicht als etwas, das das Android-System dem Benutzer anzeigt.

Wenn Sie sich den Android-Quellcode ansehen , scheint die ClipDescription.getLabel () -Methode vor Android 5.0 nicht verwendet zu werden. In 5.0 RemoteInput werden RemoteInputCompatJellybean und com.android.mail.compose.ComposeActivity mithilfe der Methode angegeben .

Wenn Sie sich die Verwendung ansehen, setzen alle diese eine Beschriftung, die nicht für den Benutzer sichtbar ist, sondern zur programmgesteuerten Identifizierung des Clips an einer anderen Stelle im Code verwendet wird.

Bei der Betrachtung , wie ClipData.newPlainText () verwendet wird , innerhalb von Android, wird die meiste Zeit null als Etikett gegeben, was darauf hindeutet , das Label nicht wirklich für alles verwendet wird.

Es ist natürlich möglich, dass ein Telefonhersteller oder ein anderer App-Entwickler das Etikett nimmt und es dem Benutzer in einer bestimmten Situation anzeigt. Im Allgemeinen sollte jedoch davon ausgegangen werden, dass die Beschriftung eines Clips dem Benutzer in Ihrer App nur angezeigt wird, wenn Sie sie selbst anzeigen.


2

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 oft verwenden.

Bei meiner App höre ich mir den ClipManager an addPrimaryClipChangedListener

Ich mache das in einer Serviceklasse, die fast die ganze Zeit im Hintergrund läuft. Ich möchte Daten, die dem PrimaryClip hinzugefügt wurden, in meiner App 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 das 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 meiner App die Bezeichnung wie folgt ein:

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

ich hoffe das hilft

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.