Що саме являє собою параметр "label" у ClipData в Android?


79

Згідно з документацією Android , ClipData використовує "мітку" як своєрідне представлення скопійованих даних.

ClippedData - це складний тип, що містить один або екземпляр елемента, кожен з яких може містити одне або кілька подань елемента даних. Для відображення користувачеві він також має ярлик та знакове зображення.

А далі він додатково пояснює "мітку" як видиму для користувача мітку для даних кліпу в деяких документах API . Однак я все ще бентежусь щодо використання етикетки.

Як ця мітка видно користувачам? Як мені його використовувати? Що слід встановити для цієї мітки, коли я викликаю заводський метод ClipData newPlainText(CharSequence label, CharSequence text)? наприклад:

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

Відповіді:


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

тут текстова мітка описує, які дані містяться в кліпі

напр.

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

ми можемо отримати це за допомогою

clip.getDescription ();

4
Чи терміни Userв документах "Видима користувачем мітка для даних кліпу" насправді означають розробників, а не користувачів програми? Я не бачу жодної цінності для користувачів програми, щоб знати цю мітку ...
hackjutsu

39
ярлик існує лише для розробників, а не для користувачів додатків
Gaurav

3
Приємно! Мене збентежив опис "Видимий для користувача" ... Але тепер це зрозуміло.
хакджуцу

24

Здається, що опис "Видима користувачем мітка для даних кліпу" в документації слід інтерпретувати як те, що ви як розробник можете встановити, а потім показати користувачеві самостійно, а не як те, що система Android покаже користувачеві.

При розгляді вихідного коду Android метод ClipDescription.getLabel () здається невикористаним до Android 5.0. У 5.0 RemoteInput , RemoteInputCompatJellybean та com.android.mail.compose.ComposeActivity вказані за допомогою методу .

Якщо ви подивитеся на використання, то всі вони встановлять мітку, яка не призначена для перегляду користувачем, а натомість використовується для програмної ідентифікації кліпу в іншому місці коду.

Коли ми розглядаємо, як ClipData.newPlainText () використовується в Android, більшу частину часу null надається як мітка, припускаючи, що мітка насправді ні для чого не використовується.

Звичайно, можливо, що якийсь виробник телефону або інший розробник додатків бере ярлик і показує його користувачеві в якійсь ситуації. Але загалом слід з упевненістю припустити, що мітка кліпу відображатиметься користувачеві у вашому додатку лише в тому випадку, якщо ви його покажете самі.


2

Сьогодні, працюючи над своїм додатком, я виявив один варіант використання етикетки ClipData. Деякі програми встановлюють для нього нуль, тоді як інші програми використовують його в значній мірі.

У випадку з моїм додатком я слухаю ClipManager's addPrimaryClipChangedListener

Я роблю це в класі обслуговування, який майже весь час працює у фоновому режимі. Я хочу обробляти дані, додані до PrimaryClip з моєї програми, інакше, ніж дані, додані в іншій програмі (скажімо, текст, скопійований у веб-браузері).

Ось витяг мого коду та те, як я використовую ярлик ClipData:

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
                }

            }
        });

У моєму додатку, коли я додаю дані до primaryClip, я включаю мітку так:

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

Сподіваюся, це допоможе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.