官网关于复制的教程:https://developer.android.google.cn/guide/topics/text/copy-paste?hl=zh-cn

关于Android 13模拟器无法运行可查看这篇文章:https://blog.csdn.net/android_cai_niao/article/details/131422541

界面UI如下:
android复制与粘贴-LMLPHP
界面中有两个输入框,点击 copy 按钮会复制第一个输入框中的文本,点击 paste按钮会把复制的文本粘贴到第二个输入框,实现代码如下:

class MainActivity : AppCompatActivity() {

    private val binding: ActivityMainBinding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)
        binding.copyButton.setOnClickListener { copyText() }
        binding.pasteButton.setOnClickListener { pasteText() }
    }

    private fun copyText() {
        val text = binding.srcEdit.text.trim().toString()
        if (text.isEmpty()) {
            Toast.makeText(this, "请输入一些文本", Toast.LENGTH_SHORT).show()
            return
        }

        val cm = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager

        // 将要复制的数据放到一个剪贴对象中
        val clipData = ClipData.newPlainText("", text)

        // 设置数据为敏感内容,则在剪贴板中文本会显示为星号
        clipData.description.extras = PersistableBundle().apply { putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, true) }

        // 把剪贴对象放到剪切板中
        cm.setPrimaryClip(clipData)

		// 由于Android 12或更低的版本没有复制反馈,所以这里使用一个toast进行反馈
        if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) {
            Toast.makeText(this, "已复制", Toast.LENGTH_SHORT).show()
        }
    }

    private fun pasteText() {
        val cm = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager

        // 如果剪贴板有数据,且是文本类型的数据
        if (cm.hasPrimaryClip() && cm.primaryClipDescription?.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN) == true) {
            val item = cm.primaryClip?.getItemAt(0)
            val pasteText = item?.text ?: ""
            binding.pasteEdit.setText(pasteText)
        }
    }
    
}

在Android 13版本中,复制时会提示出复制的内容,且可设置为显示为星号,使用了原生模拟器测试,发现复制时必须在输入法显示的情况下才会有提示,且输入法本身也有显示出复制的内容,而且不显示为星号,复制提示才会显示为星号,所以这个应该是目前的Bug吧,效果如下:
android复制与粘贴-LMLPHP
我们把设置为显示星号的代码注释掉再次运行,结果如下:

android复制与粘贴-LMLPHP
这时可以看到两个位置都显示出复制的内容了,且都是明文显示。在我的小米11 pro (Android 13)上运行时,无论输入法有无显示,点 “copy” 按钮时均无复制提示,相同的是,如果输入法显示时在输入法上也会显示出复制的内容,且无论是否设置为密文都是明文显示的。

点击 paste 按钮进行粘贴,系统会弹出toast进行提示,效果如下:
android复制与粘贴-LMLPHP

06-29 23:27