es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo eliminar las opciones de copiar, pegar, cortar y llamar que aparecen después de seleccionar el texto de un TextField en Jetpack Compose.

Tengo que ocultar las opciones de copiar, pegar, cortar y llamar de TextField que aparecen después de pulsar prolongadamente el texto de TextField en jetpack compose. Puedo hacer esto usando el siguiente código de kotlin. Debo lograr esto utilizando TextField de Jetpack Compose.

LayoutBinding?.EtJioNumber?.setCustomSelectionActionModeCallback(object:ActionMode.Callback {

  override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
    Console.debug(javaClass.simpleName,"onCreateActionMode")

    if (menu != null) {
      menu?.removeItem(android.R.id.shareText)
      menu?.removeItem(android.R.id.copy)
      menu?.removeItem(android.R.id.paste)
      menu?.removeItem(android.R.id.cut)
      menu?.removeItem(android.R.id.selectAll)
      menu.removeItem(android.R.id.autofill);
    }


    return false
  }

  override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
    Console.debug(javaClass.simpleName,"onPrepareActionMode")

   return false
  }

  override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
    Console.debug(javaClass.simpleName,"onActionItemClicked")
    return false
  }

  override fun onDestroyActionMode(mode: ActionMode?) {
    Console.debug(javaClass.simpleName,"onDestroyActionMode")
  }

})
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para lograr el mismo resultado en Jetpack Compose TextField, puedes usar el siguiente código:

    TextField(
        value = text,
        onValueChange = { text = it },
        modifier = Modifier.customSelectionActionMode(
            object : ActionMode.Callback {
                override fun onCreateActionMode(
                    mode: ActionMode?,
                    menu: Menu?
                ): Boolean {
                    menu?.removeItem(android.R.id.shareText)
                    menu?.removeItem(android.R.id.copy)
                    menu?.removeItem(android.R.id.paste)
                    menu?.removeItem(android.R.id.cut)
                    menu?.removeItem(android.R.id.selectAll)
                    menu?.removeItem(android.R.id.autofill)
                    return true
                }
                override fun onPrepareActionMode(
                    mode: ActionMode?,
                    menu: Menu?
                ): Boolean {
                    return true
                }
                override fun onActionItemClicked(
                    mode: ActionMode?,
                    item: MenuItem?
                ): Boolean {
                    return false
                }
                override fun onDestroyActionMode(mode: ActionMode?) {}
            })
    )
    

    Aquí, estamos utilizando el modificador customSelectionActionMode del TextField y pasando una instancia de ActionMode.Callback a él. En el método onCreateActionMode del callback, estamos eliminando los elementos no deseados del menú. Los otros métodos del callback pueden ser implementados según tus requerimientos.

Comments are closed.