Что такое "метка" в ClipData на Android?
Согласно документации Android, ClipData использует "метку" как своего рода представление скопированных данных.
ClippedData - это сложный тип, содержащий один или несколько экземпляров Item, каждый из которых может содержать одно или несколько представлений элемента данных. Для отображения пользователю он также имеет метку и пиктограмму.
А затем он дополнительно объясняет "метку" как видимую пользователем метку для данных клипа в некоторых документах API. Тем не менее, я все еще не понимаю, как использовать этикетку.
Как этот ярлык виден пользователям? Как я должен использовать это? Что я должен установить для этой метки, когда я вызываю фабричный метод 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();
}
Ответы
Ответ 1
ClipData clip = ClipData.newPlainText(
"text label",
"content to be copied");
здесь текстовая метка описывает, какие данные находятся в клипе
например.
ClipData clip = ClipData.newPlainText(
"user Name",
user.getName());
мы можем получить это, используя
clip.getDescription ();
Ответ 2
Похоже, что описание "Данные, видимые пользователем" для данных клипа "в документации, должно интерпретироваться как то, что вы, как разработчик, может установить, а затем показать пользователю самостоятельно, а не как то, что система Android покажет пользователя.
При взгляде на исходный код Android метод ClipDescription.getLabel(), кажется, не используется до Android 5.0. В 5.0 RemoteInput RemoteInputCompatJellybean и com.android.mail.compose.ComposeActivity объявили с помощью метода.
Если вы посмотрите на использование, все они задают метку, которая не предназначена для просмотра пользователем, а вместо этого используется для программной идентификации клипа в другом месте в коде.
При взгляде на то, как ClipData.newPlainText() используется в Android, большую часть времени null указывается как метка, предполагая, что ярлык действительно не используется ни для чего.
Конечно, какой-то производитель телефона или какой-либо другой разработчик приложений принимает ярлык и отображает его пользователю в некоторой ситуации. Но в целом следует с уверенностью предположить, что ярлык клипа будет отображаться только пользователю в вашем приложении, если вы его сами покажете.
Ответ 3
Сегодня, работая над своим приложением, я обнаружил один вариант использования метки ClipData. Некоторые приложения устанавливают нулевое значение, в то время как другие используют его в значительной степени.
В случае моего приложения я слушаю ClipManager addPrimaryClipChangedListener
Я делаю это в классе обслуживания, который работает в фоновом режиме почти все время. Я хочу, чтобы данные, добавленные в первичный клип из моего приложения, отличались от данных, добавленных в другое приложение (скажем, текст, скопированный в веб-браузере).
Вот выдержка из моего кода и как я использую метку 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));
}
надеюсь, это поможет