Category Archives: App Inventor

Una opción que podemos hacer con App Inventor y que me ha parecido muy interesante es la de compartir. En esta entrada voy a explicar de manera muy básica cómo compartir archivos almacenados en nuestro dispositivo con otra app que tengamos instalada y que sirva para poder enviar contenido. El ejemplo que voy a poner será un botón que al pulsarlo me permitirá elegir con qué aplicación voy a compartir archivos, en este caso utilizaré un archivo con nombre específico para la demostración.

1.- El primer paso es muy sencillo: sacaremos a nuestro diseñador de pantalla los elementos que vamos a utilizar, en mi caso un botón y un componente “compartir”. Este nuevo componente lo podemos encontrar en la sección “Social”.

2.- Cambiamos el texto del botón a “Compartir archivo” para darle un poco de sentido al ejemplo.

Compartir archivo - diseñador

Compartir archivo – diseñador

3.- Ahora ya podemos pasar al editor de bloques. Utilizando el bloque “cuando boton1.clic ejecutar” haremos que al pulsar el botón se produzca una acción. A este bloque le añadiremos uno llamado “llamar compartir1.CompartirArchivo” al que le podemos añadir como texto la ruta y nombre del archivo que queremos compartir.

Quedaría de esta manera:

Compartir archivo - bloques

Compartir archivo – bloques

Aunque este ejemplo es muy básico, se puede aplicar a muchos casos. Un ejemplo sería utilizarlo en la entrada anterior que escribí para poder compartir el archivo de sonido que hemos grabado.

 

Gracias a una petición de uno de los comentaristas en una de las entradas anteriores, he decidido hacer un pequeño tutorial básico sobre cómo grabar sonidos con el grabador de voz para después reproducirlo.

Este tutorial está hecho de la manera más básica para entender un poco el funcionamiento del elemento de grabación de sonidos y ver que es bastante sencillo de utilizar ya que no dispone de muchas opciones.

  1. El primer paso es sacar todos los elementos que vamos a utilizar en el diseñador de pantalla. En este caso los elementos son:
    1. Dos disposiciones horizontales para meter unos botones y que estén bien alineados.
    2. Tres botones que servirán para controlar el comienzo, final y la reproducción del sonido.
    3. Un elemento de grabación de sonidos.
    4. Un elemento reproductor.

      listado de componentes

      listado de componentes

  2. El siguiente paso es adecentar un poco la pantalla con los botones para que se vean bien y que el usuario sepa cómo utilizarlos. En este caso dentro de la primera disposición hemos puesto un botón para iniciar la grabación de sonidos y otro para detener la grabación. Ambos ajustados al ancho del contenedor.
  3. En la otra disposición pondremos el tercer botón que queda (también ajustado al contenedor)  y que servirá para reproducir la última grabación realizada. Esto lo he hecho así para que se vea el funcionamiento del grabador de sonidos. En la mayoría de los casos lo lógico sería utilizar un elemento de almacenamiento para poder guardar todos los sonidos y posteriormente elegir uno para reproducir.

    elementos en la pantalla de diseño

    elementos en la pantalla de diseño

  4. Ahora pasamos al apartado de los bloques. Este apartado lo he dividido en 5 pequeños bloques:
    1. El primero contiene únicamente una variable global que utilizaremos para hacer un control de errores en los botones para que no comience una grabación que ya está en curso o que no detenga una grabación que ya esta parada. En este caso la variable la he llamado “grabando” y la he puesto a “falso” utilizando una pieza del bloque de lógica.

      variable global

      variable global

    2. En el segundo bloque programamos el botón de iniciar la grabación de la siguiente manera:
      • Sacamos el bloque “cuando Boton1 .click ejecutar”.
      • Dentro introducimos el bloque de control “si entonces”.
      • En la condición “si” engancharemos un bloque de lógica para comparar que 2 elementos sean iguales: el primero será la variable global “grabando” y el segundo será una pieza del bloque de lógica que indica “falso”.
      • Dentro de la resolución “entonces” añadimos el bloque “llamar GrabadorDeSonidos1.Iniciar” para indicar que se va a iniciar y a continuación ponemos la variable “grabando” a “cierto”.

        botón grabar sonido

        botón grabar sonido

    3. Para el siguiente bloque haremos exactamente lo mismo pero con algunos pequeños cambios ya que se trata del siguiente botón que hará detener la grabación:
      • En la condición “si” el segundo elemento a comparar será una pieza del bloque de lógica que indica “cierto”.
      • Dentro de la resolución “entonces” añadimos el bloque “llamar GrabadorDeSonidos1.Detener” y a continuación ponemos la variable “grabando” a “falso”.

        botón detener grabación

        botón detener grabación

    4. El siguiente bloque lo sacaremos del apartado de GrabadorDeSonidos1 que será “cuando GrabadorDeSonidos1.DespuésDeSonidoGrabado ejecutar”. Aquí pondremos la pieza “poner Reproductor1.Origen como” y junto a esta la pieza “tomar Sonido” que se puede obtener haciendo click en el parámetro “sonido” y elegir la opción “tomar”.

      asignar grabación al reproductor

      asignar grabación al reproductor

    5. El último bloque contendrá la programación del botón restante, el de reproducir el sonido. Para ello haremos lo siguiente:
      • Sacar la pieza de “cuando Boton3.click ejecutar” y añadimos la condición “si entonces” (esto es igual que con los otros botones).
      • En la condición “si” pondremos otra pieza de comparación de elementos pero esta vez la comparación será si es distinto. El primer elemento a comparar será “reproductor1.origen” y el segundo será un elemento vacío ” “. Esto es para que solamente reproduzca un sonido si se ha grabado algo.
      • Dentro de la resolución “entonces” añadiremos la pieza “llamar Reproductor1.Iniciar”. De esta manera se iniciará la reproducción.

        botón reproducir sonido

        botón reproducir sonido

Con estas pocas piezas de puzzle podemos hacer que el móvil grabe un sonido y reproducirlo. A partir de aquí ya es usar la imaginación y adaptar estos elementos a los distintos casos que se quieran programar.

Aunque en las entradas anteriores sobre App Inventor siempre los nombres de los objetos son en ingles, desde hace ya un tiempo está la posibilidad de trabajar con otro idioma. En este caso vamos a ver cómo cambiar al idioma español para quienes prefieran ver todas las opciones en español.

Dentro de un proyecto, ya sea en el apartado de diseño o en el bloques, en el menú superior a la derecha justo al lado de la opción “Report an Issue” se muestra un pequeño icono que simboliza el mundo. Haciendo click en ese icono podemos cambiar el idioma de la interfaz donde una de las opciones es el español. De esta manera se cambiarán todos los nombres de los objetos y menús.

pantalla diseño app inventor

pantalla diseño app inventor

Así que a partir de ahora en las entradas posteriores mostraré el nombre de los objetos y menús en español.

Tras una temporada de descanso y viendo que muchos de los comentarios son en la categoría de App Inventor, añadiré más contenido en esta categoría aunque sin descuidar las demás. Por ello vamos con un nuevo y muy util elemento: TinyDb

Este elemento sirve para guardar datos en la app, es recomendable utilizarlo cuando lo que se quiere guardar no es una gran cantidad de datos. Para las grandes cantidades se recomienda utilizar otro elemento.

En este ejemplo veremos cómo guardar y mostrar un dato introducido por el usuario, su nombre. El funcionamiento sería que el usuario introduce su nombre y pulsa un botón para guardarlo. A continuación puede pulsar otro botón para mostrar el dato en una label.

  1. El primer paso es sacar todos los elementos que vamos a utilizar a la pantalla. En este ejemplo son: 2 label, un textbox, 2 botones y el elemento tinydb. Este último elemento se encuentra en el apartado “Storage” en la columna izquierda.
  2. Configuramos el texto para que sea un poco coherente con lo que vamos a hacer. Quedaría de esta manera:

    pantalla ejemplo tinydb

    pantalla ejemplo tinydb

  3. Lo siguiente ya es ir a los bloques y empezar a sacar piezas para guardar el dato:
    1. De la sección del boton1 que hemos puesto hay que sacar la pieza “when button1.click”.
    2. Dentro introducimos una estructura de control “if then” sacada del grupo “control” que nos servirá para comprobar si el usuario ha introducido algún dato.
    3. En la condición “if” introduciremos una operación lógica con el símbolo distinto en el que el primer parámetro será el texto introducido por el usuario, estos es, “textbox1.text” del bloque del textbox que tenemos. El segundo parámetro será simplemente el texto ” ” obtenido del bloque “text”.
    4. En la parte “then” introduciremos la pieza “callTinydb1.StoreValue” sacada del objeto tinyDb1 (nuestra base de datos). Esta misma pieza requiere 2 más, la primera será un texto con el nombre que le queramos dar al dato que guardamos, en mi caso le he llamado “nombreUsuario”, y la segunda el valor de lo que ha introducido el usuario. Esto es, “textbox1.text”.

      Guardar dato - ejemplo db

      Guardar dato – ejemplo db

  4. Una vez el texto esta guardado falta hacer la parte de mostrarlo por pantalla. Para ello sacamos las siguientes piezas:
    1. De la sección del boton2 que hemos puesto sacamos la pieza “when button2.click”.
    2. Dentro introducimos la pieza “set label2.text” que sacamos del grupo de la label2 y le adjuntamos la pieza “call tinyDb1.GetValue” que obtenemos desde el grupo de nuestra tinyDb.
    3. A esta pieza le añadimos en la parte “tag” el texto con el mismo nombre que hemos llamado al valor que guardamos, esto es, “nombreUsuario”. En caso de que no exista ningún valor podemos mostrar un texto vacío o una frase indicando que no hay dato adjuntando el texto en la parte “valueIfTagNotThere”. En mi caso he dejado vacío pero sería recomendable mostrar un texto indicando que no hay datos guardados.

      Mostrar dato guardado - ejemplo db

      Mostrar dato guardado – ejemplo db

Con estos bloques ya funciona nuestro pequeño ejemplo de guardar y mostrar datos. Algo que hay que tener en cuenta es que los datos que se guardan en un objeto TinyDb NO se borran al salir de la app. Sólo se borran si se borra la cache del móvil desde el panel de administración de aplicaciones.

Para más información, como siempre en la documentación de AppInventor

App Inventor 2

App Inventor 2

Después de mucho tiempo sin escribir, vuelvo con más ganas de hacer apps. Y qué sorpresa tan grata me he llevado al ver que ha salido una nueva versión de App Inventor. El otro día la probé y esta muy bien la verdad. Aquí explico un poco con lo que me encontré:

Lo primero que vi fue que ahora la url para acceder es distinta. Como es la versión 2, la url sería la siguiente http://ai2.appinventor.mit.edu para poder acceder a tu panel personal donde poder desarrollar las apps.

Una vez en el panel lo primero que noté fue que la cabecera y las opciones de menú son distintas. En la cabecera de la web tenemos las opciones para crear un nuevo proyecto, guardarlo, importar alguno que tengamos guardado y también podemos conectarnos al dispositivo android o abrir el emulador. Además, con la opción de “build” podemos crear el archivo .apk o mediante un código QR instalar la app en nuestro móvil. Estos son los cambios más importantes en la cabecera.

En el menú, ahora tenemos por un lado los botones para añadir una nueva pantalla o borrar una que ya tengamos, y en el lado derecho los botones para cambiar entre el panel de diseño y los bloques.

Cuando vamos al apartado de bloques vemos un cambio considerable en la pantalla. El menú de la lista de bloques lo tenemos a la izquierda de la pantalla y las piezas de puzle ahora están más resaltadas, coloreadas y con el texto mas legible. La mayoría de las piezas son las mismas pero ahora puedes modificar fácilmente entre una y otra ya que todas ellas poseen una lista desplegable para elegir el elemento sobre el que trabajar en caso de tener más de uno igual (como por ejemplo 2 botones, o 2 imágenes).

Estos son los mayores cambios en cuanto a la programación de apps. Pero también hay algunas variaciones a la hora de instalar y poder usar nuestra app.

Existen 3 métodos para instalar App Inventor y probar nuestros programas:

1.- El método más fácil de seguir y que está altamente recomendado es el de probar nuestro código en un dispositivo android que tenga acceso a internet (preferiblemente Wifi). Con este método simplemente debemos descargarnos la app de App Inventor desde el market de Google y desde el menú de “Connect” pulsamos “AI Companion”. El programa nos proporcionará un código QR el cual podremos insertar en nuestro dispositivo android cuando abrimos la app descargada. Y con esto ya estamos conectados a nuestro panel de desarrollo para poder probar en vivo todo lo que hacemos.

2.- Si no disponemos de un dispositivo android tendremos que usar un emulador. Para ello nos descargamos de aquí el programa de App Inventor y lo instalamos en nuestro sistema operativo (en Linux todavía no han publicado los pasos). Una vez instalado lo ejecutamos y desde nuestro panel de desarrollo ya podemos dale a “Connect”-> “Emulator”. Es muy sencillo también.

3.- Si tenemos un dispositivo android pero no sin internet, podriamos optar por la opción de probar nuestro código en el dispositivo conectado a nuestro ordenador con un calbe USB. En este caso también deberemos descargar e instalar la aplicación de App Inventor en nuestro ordenador. Además, también deberemos tener instalada la app en el dispositivo. Una vez tengamos estas dos cosas podremos ejecutar la de nuestro ordenador y desde el panel de desarrollo darle a “Connect”->”USB”. Con esto ya podremos ver nuestra app en el dispositivo.

Esto es por ahora lo nuevo de App Inventor. A seguir desarrollando!

Hoy vamos a ver cómo crear un listado de elementos en App Inventor. Este componente es muy habitual en las apps. Muchas veces nos encontramos con un listado de elementos de los cuales hay que elegir uno. Estos son los pasos para crear esa lista:

  1. Como siempre, debemos crear un proyecto nuevo o tener uno ya creado.
  2. En el diseñador de pantallas arrastramos el elemento “listPicker” a la pantalla donde queremos que se muestre.
  3. A continuación cambiamos sus propiedades a nuestro gusto: en este caso he modificado la propiedad “text” para indicar que se debe seleccionar un elemento de la lista, y la propiedad “ElementsFromString” que es donde añadiremos el listado de componentes que deben aparecer a la hora de desplegar el listado.
Propiedades lista

Propiedades lista

Este sería el resultado:

Ejemplo de lista

Ejemplo de lista

Con esto ya tenemos creada nuestra lista de elementos. Ahora vamos a ver qué propiedades tiene para poder configurarlo al gusto de cada uno:

  • BackgroundColor: Este parámetro indica el color de fondo de la lista. Por defecto es negro.
  • ElementsFromString: Los elementos que tendrá la lista de componentes. Deben estar separados por comas.
  • Enabled: Aquí indicamos si queremos que la lista este habilitada o deshabilitada.
  • FontBold: Este parámetro indica que la letra se mostrará en negrita. Por defecto esta desactivado.
  • FontItalic: Si queremos que la letra se muestre en cursiva, deberemos marcar esta opción.
  • FontSize: El tamaño de la letra de la lista es por defecto 14 pero podemos modificarlo en este punto.
  • FontTypeface: Este atributo indica el tipo de letra que se muestra.
  • Image: Si queremos añadir una imagen de fondo elegiremos la imagen y la subiremos en este parámetro.
  • Selection: Aquí podemos indicar el elemento que se mostrará seleccionado cuando se cargue el listado.
  • Shape: En este parámetro se define los bordes de la lista. Por defecto es rectangular pero podemos modificarlo para que sea ovalada o redondeada.
  • ShowFeedback: Este atributo muestra una pequeña animación cuando se utiliza la lista de modo que ayuda al usuario a indicar que ha hecho click en ella.
  • Text: Aquí indicamos el texto que mostrará por defecto cuando se cargue y antes de elegir un componente.
  • TextAlignment: En este apartado podemos indicar si queremos que el texto que se muestra por defecto en la lista esté alineado a la izquierda, centrado o a la derecha. Por defecto se muestra centrado.
  • TextColor: Para cambiar el color del texto configuramos este apartado y elegimos el que queramos.
  • Visible: Este atributo indica si la lista desplegable es visible o no. Por defecto está marcado.
  • Width: Aquí podemos indicar la anchura del listado cuando está sin desplegar.
  • Height: El último de los parámetros es indicar la altura que queramos que tenga la lista cuando no esta desplegada.

Aquí dejo el enlace con más detalles de las propiedades y los eventos más comunes de las listas desplegables.

 

Hoy vamos a ver cómo podemos mostrar una batería de datos en una estructura de tabla. Con App Inventor es muy sencillo, hay que ir poco a poco construyendo y dando formato a cada fila y columna. El ejemplo que voy a hacer es una tabla de 4 filas y 3 columnas.

1.- El primer paso es, como siempre, crear un proyecto o elegir uno que ya tengamos.
2.- A continuación lo que haremos será arrastrar un elemento “TableArrangement” ubicado en el apartado “Screen Arrangement” a la zona donde queremos que se visualice nuestra tabla.
3.- Una vez que tengamos el “TableArrangement” donde queremos, cambiamos sus propiedades para darle el tamaño adecuado y definimos cuantas filas y columnas queremos que tenga.

Propiedades tabla

Propiedades tabla

4.- Ahora vamos a rellenar cada celda con una label que mostrará el texto que queramos y modificamos las propiedades para que la primera fila muestre un texto en negrita y con un fondo de color llamativo. De esta manera habrémos creado una cabecera. Los mismo hay que ir haciendo con el resto de filas hasta que quede un resultado que nos guste. Aquí está el mío.

Tabla llena

Tabla llena

En este caso he definido directamente cada label con su texto a mostrar, pero por ejemplo se puede programar para que cuando se inicie la pantalla se rellene automáticamente cada label con los datos que tengamos. Así quedarían las piezas de puzzle.

Rellenar automáticamente las labels

Rellenar automáticamente las labels

También es habitual que los datos que vayamos a mostrar se obtengan de una base de datos pero eso comentaré en otro momento.

Siguiendo con los componentes más habituales de una app, hoy vamos a ver las labels o etiquetas.

Las labels son componentes que se utilizan para mostrar un texto. Para crear una simplemente deberemos arrastrarla desde el panel izquierdo a la pantalla de nuestra app. Estas sos sus propiedades:

  • BackgroundColor: Esta opción permite asignar un color de fondo a la etiqueta.
  • FontBold: Si queremos que el texto de se muestre en negrita tendremos que marcar esta propiedad.
  • FontItalic: Para mostrar el texto en cursiva marcaremos esta opción.
  • FontSize: Este parámetro indica el tamaño de letra del texto mostrado en la label. Por defecto es 14 pero lo podemos modificar para que muestre el tamaño que queramos.
  • FontTypeFace: Para cambiar el tipo de letra que se muestra podemos elegir entre los tres distintos que permite esta opción: sans serif, serif y monospace.
  • Text: Aquí escribiremos el texto que queremos que muestre nuestra label.
  • TextAlignment: Esta opción nos permite definir que alineación queremos que tenga el texto: a la izquierda, centrado o a la derecha. Por defecto está alineado a la izquierda.
  • TextColor: Con este parámetro podemos indicar qué color queremos que tenga el texto de la label. Por defecto es negro.
  • Visible: Podemos hacer que la label no se muestre. Para ello debemos seleccionar el valor “hidden” en esta propiedad. Por defecto se muestra y su valor es “showing”.
  • Width: Este parámetro define la archura de la label en pixels. También podemos indicar que se ajuste a la anchura del objeto donde está contenida.
  • Height: Al igual que con la propiedad “width”, esta opción indica el tamaño de la altura en pixels. También se puede indicar que se ajuste al tamaño del objeto padre.
Propiedades label

Propiedades label

A diferencia de los botones, las labels no contienen eventos. Hay más información en la documentación oficial.

Algo que llama mucho la atención cuando empiezas con App Inventor son los bloques de los puzzles. Hay muchos con formas distintas y con distintos colores y lo primero que uno se pregunta es ¿Y por qué tienen esos colores?, ¿Tienen un significado? Pues resulta que sí. Investigando un poco he encontrado un significado a los colores que puede ser interesante para comprender las piezas de puzzle que usamos. Aquí va la explicación:

  • Eventos: Los bloques que corresponden a eventos son de color verde y se muestran siempre en la parte superior de cada sección.
Bloques de eventos

Bloques de eventos

  • Expresiones y acciones: Normalmente dentro de un bloque de eventos se introducen otros que indican acciones o expresiones como por ejemplo la llamada a una función o un procedimiento. Estas piezas suelen ser de color azul o morado según lo que se vaya a usar y siempre se colocan apilados uno debajo del otro indicando un orden lógico de ejecución.
Bloques de expresiones y funciones

Bloques de expresiones y funciones

  • Funciones de texto: En ocasiones es útil utilizar funciones para manipular cadenas de texto. Estos bloques son de color marrón y siempre van unidos a los parámetros que nosotros indiquemos.
Bloques de funciones de texto

Bloques de funciones de texto

  • Funciones de números: En el caso del tratamiento de números y el uso de funciones matemáticas,  son de un color verde claro y siempre están unidas a los parámetros que indiquemos.
Bloques de funciones de números

Bloques de funciones de números

  • Estructuras de control: Existen piezas para reflejar condiciones de nuestra app y funciones más básicas del sistema como por ejemplo cerrar la aplicación. Son de color amarillo y pueden englobar el resto de funciones.
Bloques de control

Bloques de control

Esto son los tipos de bloques más importantes. Para saber más sobre este tema aquí está la documentación oficial.

Vamos a empezar a profundizar más en los objetos que podemos crear cuando estamos diseñando nuestra app. Uno de los más comunes es el botón, así que voy a explicar todas sus propiedades para que cuando tengamos que añadir uno sepamos cómo modificarlo a nuestro gusto.

Antes de hacer nada tenemos que añadir un botón a nuestra pantalla. Una vez hecho esto, podemos ver en la columna de la derecha todas sus propiedades.

Propiedades botón

Propiedades botón

Propiedades:

  • BackgroundColor: En esta opción podemos elegir un color de fondo para nuestro botón. No tiene mucho sentido si queremos poner una imagen de fondo en lugar de un color.
  • Enabled: Esta propiedad sirve para indicar si queremos que el botón se muestre desactivado o activado por defecto. Si desmarcamos esta casilla no se podrá usar el botón al utilizar la app.
  • FontBold: Al marcar esta propiedad indicamos que el texto del botón se muestre en negrita.
  • FontItalic: Si queremos que el texto del botón se muestre en cursiva marcamos esta opción.
  • FontSize: En esta propiedad indicamos el tamaño que queremos que tenga el texto del botón. Por defecto es 14.
  • FontTypeface: Aquí podemos modificar el tipo de letra que queremos que tenga el botón. Hay 3 tipos: sans serif, serif y monospace
  • Image: En esta propiedad podemos indicar si queremos que muestre una imagen de fondo el botón. En ese caso tenemos que elegir una imagen, subirla y aplicarla a este botón.
  • Shape: Esta opción indica la forma del botón. Por defecto es rectangular pero podemos cambiarla para que sea ovalada o con los bordes redondeados.
  • ShowFeedback: Con esta propiedad podemos definir si queremos que el botón haga un efecto visual a la hora de hacer click en el. Esto viene bien para el usuario que lo usa ya que si no hay efecto visual puede que no sepa que ha pulsado el botón.
  • Text: Aquí escribiremos el texto que se mostrará en el botón. También podemos dejarlo vacío por ejemplo porque queremos mostrar una imagen de fondo.
  • TextAlignment: En caso de que queramos mostrar un texto en el botón, podemos definir en esta propiedad cómo queremos que esté alineado: izquierda, derecha o en el centro.
  • TextColor: Esta propiedad define el color del texto que muestra el botón. Si no hemos indicado ningún texto no tiene sentido definir color.
  • Visible: La propiedad “Visible” sirve para hacer que el botón se muestre o no. Puede que nos sea útil que al principio nuestro botón esté oculto, en tal caso el valor deberá ser “hidden”.
  • Width: Aquí podemos indicar el tamaño del botón a lo ancho. La medida es en pixels o podemos indicar que se ajuste al contenedor donde se muestra, de esta manera ocuparía el total de ancho de su contenedor.
  • Height: Al igual que con la propiedad “Width”, podemos hacer lo mismo con “Height”. Esta, indica el tamaño del botón a lo largo en pixels. También podemos indicar que se ajuste al tamaño de su contenedor.

Eventos:

Para ver los eventos que tienen los botones, es necesario abrir el editor de bloques y acceder al apartado “My blocks” y el nombre del botón al que queramos programar el evento.

Eventos botón

Eventos botón

Estos son los eventos disponibles:

  • Click: Este evento se ejecuta cuando se hace click en el botón.
  • GotFocus: Este caso se ejecutará cuando el cursor esté sobre el botón pero sin pulsarlo. Puede ser un caso dificil en algunos dispositivos móviles ya que no todos tienen esta posibilidad.
  • LongClick: Aquí indicamos lo que queremos programar en caso de que se haya pulsado y mantenido el botón durante unos segundos.
  • LostFocus: Al igual que con “GotFocus”, este evento no puede darse en todos los dispositivos móviles pero ocurre cuando el botón deja de tener el cursor sobre si mismo.

Toda esta información y más está en la documentación oficial de App Inventor.

 

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies