Несколько методов копирования текста в буфер обмена в Compose: подробное руководство

Чтобы скопировать текст в буфер обмена в Compose, вы можете использовать API ClipboardManager. Ниже я расскажу вам несколько способов добиться этого, а также приведу примеры кода.

Метод 1: непосредственное использование API ClipboardManager

import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
fun copyTextToClipboard(context: Context, text: String) {
    val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clipData = ClipData.newPlainText("text", text)
    clipboardManager.setPrimaryClip(clipData)
}

В этом методе мы получаем ссылку на ClipboardManager, используя метод getSystemService(). Затем мы создаем новый объект ClipDataс копируемым текстом и меткой. Наконец, мы устанавливаем данные клипа в качестве основного клипа в диспетчере буфера обмена.

Метод 2. Использование библиотеки Anko (устарело)

import org.jetbrains.anko.clipboardManager
fun copyTextToClipboard(context: Context, text: String) {
    context.clipboardManager?.text = text
}

Библиотека Anko предоставляет удобное свойство расширения clipboardManager, которое возвращает ссылку на ClipboardManager. Мы можем напрямую присвоить текст свойству textменеджера буфера обмена.

Метод 3. Использование API androidx.compose.ui.platform.ClipboardManager

import androidx.compose.ui.platform.ClipboardManager
import androidx.compose.ui.platform.LocalContext
import androidx.compose.runtime.Composable
@Composable
fun copyTextToClipboard(text: String) {
    val clipboardManager = LocalContext.current.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
    val clipData = ClipData.newPlainText("text", text)
    clipboardManager.setPrimaryClip(clipData)
}

Если вы используете Jetpack Compose, вы можете использовать ClipboardManager, предоставляемый API композиции LocalContext. Этот метод аналогичен методу 1, но с соответствующим импортом и использованием Compose.