Чтобы скопировать текст в буфер обмена в 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.