Ir al contenido principal

Análisis Para el Desarrollo Móvil con App Inventor 2

Que es App Inventor?

App Inventor es una plataforma online que permite la creación de App's para Android (El sistema operativo más usado actualmente en el mundo (12-Abr-2019)), sin conocimiento de códigos de programación o diseño WEB.
Es de código abierto y esta en evolución constante gracias a ello.

Secciones de la plataforma App Inventor 2
Secciones de la plataforma App Inventor 2


El siguiente es el enlace para acceder Plataforma

http://ai2.appinventor.mit.edu/


Mis observaciones Sobre Android

La base de datos SQLite, me parece de gran importancia para la velocidad del manejo de la información y presentación en el dispositivo.
Del soporte multimedia,diría que soporta los usuales y eso es lo que necesita el usuario promedio, sin embargo herramientas online permiten ya convertir formatos de video y enviarlos vía web o streaming, lo que en últimas en cierto modo lo amplía a todo formato multimedia.
El soporte para hardware adicional es de lo más fascinante para mi, ya que me recuerda los famosas tricorders de Star-trek y en cierto modo al implementar el hardware, el tricorder parece una versión de los celulares actuales (Además de poder enviar y recibir información por su conectividad, recogida con hardware externo, le posibilita el uso de dicho hardware y crear muchas más maravillas).
La tienda es donde está el Gboard y muchas cosas más que permiten a nuestros móviles interactuar de formas cada vez más accesibles y proporcionando un sin número de aplicaciones que se expanden simultáneamente con el hardware adicional necesario para ciertas aplicaciones.
La conectividad, la mensajería, el almacenamiento, navegación web, bluetooth, el entorno de desarrollo, multitáctil (creo que lo cubre el soporte para hardware), son otras características importantes, pero que no son tan relevantes.
En resumen esta tecnología me parece de lo mejor.

Iniciando el análisis

Es de vital importancia el conocimiento de los componentes, así como sus propiedades, eventos y métodos, esto nos permite elegir eficientemente los componentes a utilizar en el funcionamiento de nuestra App.

Inicialmente debemos estudiar, analizar y definir los siguientes aspectos. 

Características de la aplicación.
Interfaz amigable (Usuarios, Independientes, Empresas)
Lista de componentes (herramientas) que contendría la aplicación.
Funcionamiento (descripción de cómo se conectan los componentes al funcionar la app).

Una vez teniendo estos datos.
Organizamos un diagrama de flujo que permita presentar al cliente de forma vistosa y amigable el funcionamiento de la App.

Ventajas - Desventajas - y Alternativas


Ventajas:
  1. La ventaja principal de App Inventor es la posibilidad de crear y desarrollar aplicaciones sin necesidad de manejar ningún lenguaje de programación, aprender a programar en cualquier lenguaje es un obstáculo para muchas personas y puede ser un limitante relevante.
  2. La aplicación maneja un sistema de diseño por medio de bloques bastante amigable.
  3. Puede utilizarse en versión para escritorio y en la nube.
  4. Al ser de código abierto es muy fácil encontrar información sobre su uso además de otros desarrolladores con ánimos de colaborar.

Desventajas:
  1. Al ser una aplicación que no maneja código, tiene ciertas limitaciones a la hora de crear aplicaciones con un desarrollo complejo o que necesite utilizar componentes avanzados del dispositivo Android.
  2. No se pueden realizar Apps para IOS.
Alternativas:
  1. Al permitir vincular un sitio web a la app, podemos usar código y eliminar las limitaciones más relevantes. Obviamente aquí perdemos la amigabilidad.
  2. En cuanto a su uso en otros sistemas operativos, existen herramientas que convierten el apk, en una aplicación para Windows Phone o Android. Las cuales solucionan este inconveniente de momento.

Instalación de App Inventor

Primero que todo debemos cumplir con unos requisitos mínimos en el equipo:


Ordenador y sistema operativo:
  • Macintosh (con procesador Intel): Mac OS X 10.5, 10.6
  • Windows: Windows XP, Windows Vista, Windows 7
  • GNU / Linux: Ubuntu 8 +, Debian 5 +
Navegador:
  • Mozilla Firefox 3.6 o superior.
  • Apple Safari 5.0 o superior.
  • Google Chrome 4.0 o superior.
  • Microsoft Internet Explorer 7 o superior
Comprobar la configuración de Java:

En este paso es necesario actualizar la máquina virtual de java del equipo a la
última versión, así que te recomiendo descargar el componente e instalarlo, a
continuación se presenta el link de descarga.

Instalar librerías de app inventor.

Para que app inventor funcione correctamente en su equipo es necesario instalar las librerías correctas y actualizadas desde su sitio web oficial, a continuación se provee el link de descarga.

Configurar su teléfono Android

En esta sección, nos aseguraremos de que su teléfono está listo para su uso con la aplicación de Inventor. 
Esto implica la comprobación de algunas opciones de configuración y asegurarse de que está establecido de la manera correcta, a continuación, conectar el teléfono al ordenador con un
cable USB. 
Si usted tiene una máquina con Windows, entonces es posible que tenga que instalar un controlador para el teléfono.

Compruebe la configuración de su teléfono:

Permitir fuentes desconocidas en dispositivo móvil
Permitir fuentes desconocidas en dispositivo móvil


Para tener el teléfono listo para trabajar con la aplicación de Inventor, siga estos pasos:
  1. Pulse el botón Inicio para ir a la pantalla de su teléfono principal.
  2. Pulse el botón Menú, luego Configuración y a continuación aplicaciones.
  3. Si el teléfono tiene un lugar desconocido de fuentes, asegúrese de que está activada.
  4. Toque en el Desarrollo.
  5. Asegúrese de que tanto la USB debugging y stay awake estan activados.
Activar el modo de depuración en dispositivos móviles
Activar el modo de depuración en dispositivos móviles


Si su teléfono está en la pantalla de bloqueo, desbloqueo como lo haría para estar listo para ejecutar una aplicación.

Ahora tome el cable USB y conéctelo al teléfono y a la computadora.

Dos mensajes de estado aparecerán en el teléfono en el área de notificaciones en la
parte superior de la pantalla:
  • USB conectado significa que el teléfono está conectado a la computadora.
  • Depuración USB conectado permite que App Inventor controle el teléfono.

Interfaz de App Inventor 2

Menú de App Inventor:

En la parte superior de la página, tenemos el menú principal que explicaré en cuatro secciones



Sección Derecha - Arriba:

  • Projects: Administración, creación, borrado, importación,exportación, guardado de proyectos, Chekpoint y administración de keystore.
  • Connect: Permite la conexión con dispositivos para probar la App.
  • Build: Creación del archivo APK y el QR.
  • Help: Tutoriales, Ayuda, Guías y mucho más.
Sección Derecha - Abajo:

  • ScreenN: Permite seleccionar el Screen en el que vamos a operar.
  • Add Screen: Añade un nuevo Screen o Pantalla.
  • Remove Screen: Remueve un Screen o Pantalla.

Sección Izquierda - Arriba:

  • My Projects: Acceso directo al indice de proyectos.
  • Gallery: Muestra proyectos por categorías.
  • Guide: Documentación de la plataforma.
  • Report an Issue: Crear un tema o reportar un problema.
  • English: Permite seleccionar el idioma.
  • mail: muestra la cuenta del usuario.
Sección Derecha - Abajo:

  • Designer: Muestra la interfaz gráfica.
  • Blocks: Muestra la interfaz de bloques.

Componentes de App Inventor 2:

En esta sección encontramos diversos componentes que se pueden agregar a la App.
Cada subsección contiene más opciones, a continuación una lista de componentes, eventos y métodos.


Componentes Básicos:


Button(Boton):
  • Propiedades: BackgroundColor - Enabled - FontBold, FontItalic - FontSize - FontTypeface - Height - Width - Image - Text - TextAlignment - TextColor
  • Eventos: Click() Usuario pulsa y suelta el botón. -  GotFocus() El botón es el elemento enfocado. Lo hemos seleccionado con el dedo (pero mientras no lo soltemos, no es un click).
Canvas (Lienzo):
  • Propiedades: BackgroundColor, BackgroundImage, Height, Width, LineWidth, PaintColor, Visible.
  • Eventos: Dragged(number startX, number startY, number prevX, number prevY, number currentX, number currentY, boolean draggedSprite). Cuando el usuario arrastra el dedo de un punto de la pantalla (PrevX, prevY) a otro (X, Y). El par (startX, startY) indica el primer punto donde el usuario tocó la pantalla, y "draggedSprite" indica si un Sprite está siendo arrastrado. Touched(number x, number y, boolean touchedSprite) Cuando el usuario toca el lienzo, proporciona la posición (X, Y) del punto tocado respecto a la esquina superior izquierda del lienzo. El valor "touchedSprite" es verdadero si un sprite también estaba en esta posición.
  • Métodos: Clear() - DrawCircle(number x, number y, number r) - DrawLine(number x1, number y1, number x2, number y2) - DrawPoint(number x, number y) - Save() - SaveAs(nombre del fichero).
CheckBox (casilla de verificación):
  • Propiedades: BackgroundColor - Checked - Enabled - Height - Width - Text - TextColor - Visible.
  • Eventos: Click() - GotFocus() - LostFocus().
Reloj:
  • Propiedades: TimerInterval(mls) - TimerEnabled - TimerAlwaysFires
  • Eventos: Timer()
  • Métodos: SystemTime() - Now() - MakeInstant(fecha) - MakeInstantFromMillis(ms) - GetMillis(instante) - AddSeconds(instante, Número de segundos) - AddMinutes(instante, Número de minutos) - AddHours(instante, Número de horas) - AddDays(instante, Número de días) - AddWeeks(instante, Número de semanas) - AddMonths(instante, Número de meses) - AddYears(instante, Número de años) - Duration(instante de inicio, instante posterior) - Second(instante) - Minute(instante) - Hour(instante) - DayOfMonth(instante) - Weekday(instante) - WeekdayName(instante) - Month(instante) - MonthName(instante) - Year(instante) - FormatDateTime(instante) - FormatDate (instante) - FormatTime(instante).
Image (Imagen):
  • Propiedades: Picture - Visible - Height - Width.
Label (Etiqueta):
  • Propiedades: BackgroundColor - FontBold - FontItalic - FontSize - FontTypeface - Height - Width - Text - TextAlignment - TextColor - Visible
ListPicker (Lista de selección):
  • Propiedades: Selection - Items - ElementsFromString - BackgroundColor - FontBold -  FontItalic - FontSize - FontTypeface - Height - Width - Text - TextAlignment - TextColor - Visible.
  • Eventos: AfterPicking() - BeforePicking() - GotFocus() - LostFocus().
Screen (Pantalla):
  • Propiedades: BackgroundColor - BackgroundImage - Height - icon - Scrollable - Title - Width
  • Eventos: Initialize() - ErrorOccurred(component, functionName, number errorNumber, message).
PasswordTextBox (cuadro de texto para contraseña):
  • Propiedades: BackgroundColor - Enabled - FontBold - FontItalic - FontSize - FontTypeface - Height - Width - TextAlignment - TextColor - Hint.
  • Eventos: GotFocus() - LostFocus().
TextBox:
  • Propiedades: BackgroundColor - Enabled - FontBold - FontItalic - FontSize - FontTypeface - Height - Hint - MultiLine - NumbersOnly - Text - TextColor - Visible.
  • Eventos: GotFocus() - LostFocus().
  • Métodos: HideKeyboard()
TinyDB:
  • Métodos: StoreValue(text tag, valueToStore) - GetValue(text tag)

Componentes Multimedia (Media):

Camera (Cámara):
  • Métodos: TakePicture()
  • Eventos: AfterPicture (ruta al archivo de imagen)
ImagePicker (Selector de imagen):
  • Propiedades: ImagePath - Enabled - BackgroundColor -  FontBold - FontItalic - FontSize - FontTypeface - Height - Width - Image - Text - TextAlignment - TextColor
  • Eventos: AfterPicking() - BeforePicking() - GotFocus() - LostFocus()
Player (Reproductor de audio):
  • Propiedades: Fuente
  • Métodos: Pause() - Start() - Stop() - Vibrate (número de milisegundos)
Sound (sonido):
  • Propiedades: Fuente - MinimumInterval
  • Métodos: Pause() - Play() - Resume() - Stop() - Vibrate (número de milisegundos)
VideoPlayer (Reproductor de vídeo):
  • Propiedades: Fuente - Visible
  • Métodos: Pause() - Start() - SeekTo (número de millisegundos) - GetDuration ()

Componentes Sensores (Sensor):

AccelerometerSensor (Sensor acelerómetro):
  • Propiedades: Available - Enabled - XAccel - YAccel - ZAccel
  • Eventos: AccelerationChanged(number xAccel, number yAccel, number zAccel) - Shaking()
LocationSensor (Sensor de posicionamiento):
  • Propiedades: Accuracy - Altitude - AvailableProviders - CurrentAddress - Enabled - HasAccuracy - HasAltitude - HasLongitudeLatitude - Latitude - Longitude - ProviderLocked - ProviderName
  • Eventos: LocationChanged(number latitude, number longitude, number altitude) - StatusChanged(text provider, text status)
  • Métodos: LatitudeFromAddress(text locationName) - LongitudeFromAddress(text locationName)
OrientationSensor (Sensor de orientación):
  • Propiedades: Available - Enabled - Azimuth - Pitch - Roll - Magnitude - Angle
  • Eventos: OrientationChanged(number azimuth, number pitch, number roll)

Componentes Alineamientos de Pantalla:

HorizontalArrangement (Alineamiento horizontal):
  • Propiedades: Visible - Height - Width
TableArrangement (Alineamiento en tabla):
  • Propiedades: Visible - Rows (number-of-rows) - Columns (number-of-columns) - Height - Width
VerticalArrangement (Alineamiento vertical):
  • Propiedades: Visible - Height - Width

Componentes Animación (Animation):


  1. Ball (bola):
    • Propiedades: Radius - PaintColor - Enabled - Interval - Visible - Heding - X - Y - Speed
    • Eventos: CollidedWith(component other) - Dragged(number startX, number startY, number prevX, number prevY, number currentX, number currentY) - EdgeReached(number edge(norte = 1 - noreste = 2 - este = 3 - sureste = 4 - al sur = -1 - al suroeste = -2 - oeste = -3 - al noroeste = -4)) - NoLongerCollidingWith(component other) - Touched(number x, number y)
    • Métodos: Bounce(number edge) - Boolean CollidingWith(component other) - MoveIntoBounds() - MoveTo(number x,number y)
  2. ImageSprite (Sprite de imagen):
    • Propiedades: Picture - Enabled - Interval - Rotates - Visible - Heding - X - Y - Speed - Height - Width
    • Eventos: CollidedWith(component other) - Dragged(number startX, number startY, number prevX, number prevY, number currentX, number currentY) - EdgeReached(number edge(igual anterior)) - NoLongerCollidingWith(component other)
    • Métodos: Bounce(number edge) - Boolean CollidingWith(component other) - MoveIntoBounds() - MoveTo(number x,number y)

Componentes Sociales (Social)


  1. ContactPicker (Selector de contactos):
    • Propiedades: Enabled - Image - BackgroundColor - ContactName - EmailAddress - Picture - FontBold - FontItalic - FontSize - FontTypeface - Text - TextAlignment - TextColor - Visible - Width - Height
    • Eventos: AfterPicking() - BeforePicking() - GotFocus() - LostFocus()
  2. EmailPicker (Selector de correo electrónico):
    • Propiedades: Enabled - BackgroundColor - FontBold - FontItalic - FontSize - FontTypeface - Text - TextAlignment - TextColor - Hint - Visible - Width - Height
    • Eventos: GotFocus() - LostFocus()
  3. PhoneCall (llamada telefónica):
    • Propiedades: PhoneNumber
    • Métodos: MakePhoneCall()
  4. PhoneNumberPicker (Selector de número de teléfono):
    • Propiedades: Enabled - Image - BackgroundColor - ContactName - EmailAddress - PhoneNumber - Picture - FontBold - FontItalic - FontSize - FontTypeface - Text - TextAlignment - TextColor - Visible - Width - Height
    • Eventos: AfterPicking() - BeforePicking() - GotFocus() - LostFocus()
  5. Texting (mensajes de texto):
    • Propiedades: PhoneNumber - Message - ReceivingEnabled
    • Eventos: MessageReceived(text number, text messageText)
    • Métodos: SendMessage()
  6. Twitter:
    • Propiedades: ConsumerKey - ConsumerSecret - DirectMessages - Followers - FriendTimeline - Mentions - SearchResults - Username
    • Eventos: DirectMessagesReceived(list messages) - FollowersReceived(list followers) - FriendTimelineReceived(list user-messages-list) - IsAuthorized() - MentionsReceived(list mentions) - SearchSuccessful(list searchResults)
    • Métodos: Authorize - CheckAuthorized - DeAuthorize - DirectMessage(text user, text message) - Follow(text user) - RequestDirectMessages() - RequestFollowers() - RequestFriendTimeline() - RequestMentions() - SearchTwitter(text query) - SetStatus(texts) - StopFollowing(text user)

Componentes LEGO MINDSTORMS


  1. NxtDirectCommands:
    • Propiedades: BluetoothClient - DeleteFile(fileName texto) - DownloadFile (fuente del texto, el destino de texto) - GetBatteryLevel() - GetBrickName() - GetCurrentProgramName() - GetFirmwareVersion() - GetInputValues (sensorPortLetter texto) - GetOutputState (motorPortLetter texto) - KeepAlive () - ListFiles (wildcard texto) - LsGetStatus (sensorPortLetter texto) - LsRead (sensorPortLetter texto) - LsWrite (sensorPortLetter texto, lista de la lista, el número rxDataLength) - MessageRead (número de buzón) - MessageWrite (número de buzón, mensaje de texto) - PlaySoundFile (fileName texto) - PlayTone (número frequencyHz, durationMs número) - ResetInputScaledValue (sensorPortLetter texto) - ResetMotorPosition (motorPortLetter texto, relativa boolean) - SetBrickName (nombre de texto) - SetInputMode (texto sensorPortLetter, número sensorType, número sensorMode) - SetOutputState (motorPortLetter texto, número potencia, modo de número, número regulationMode, número turnRatio, número RunState, número tachoLimit) - StartProgram (programName texto) - StopProgram () - StopSoundPlayback ()
  2. NxtColorSensor:
    • Propiedades: BluetoothClient - SensorPort - DetectColor - ColorChangedEventEnabled - GenerateColor - BottomOfRange - TopOfRange - BelowRangeEventEnabled - WithinRangeEventEnabled - AboveRangeEventEnabled
    • Eventos: ColorChanged(number color) - BelowRange() - WithinRange() - AboveRange()
    • Métodos: GetColor () - GetLightLevel ()
  3. NxtLightSensor:
    • Propiedades: BluetoothClient - SensorPort - GenerateLight - BottomOfRange - TopOfRange - BelowRangeEventEnabled - WithinRangeEventEnabled - AboveRangeEventEnabled
    • Eventos: BelowRange() - WithinRange() - AboveRange()
    • Métodos: GetLightLevel ()
  4. NxtSoundSensor:
    • Propiedades: BluetoothClient - SensorPort - BottomOfRange - TopOfRange - BelowRangeEventEnabled - WithinRangeEventEnabled - AboveRangeEventEnabled
    • Eventos: BelowRange() - WithinRange() - AboveRange()
    • Métodos: GetSoundLevel()
  5. NxtTouchSensor:
    • Propiedades: BluetoothClient - SensorPort - PressedEventEnabled - ReleasedEventEnabled
    • Eventos: Pressed() - Released()
    • Métodos: IsPressed()
  6. NxtUltrasonicSensor:
    • Propiedades: BluetoothClient - SensorPort - BottomOfRange - TopOfRange - BelowRangeEventEnabled - WithinRangeEventEnabled - AboveRangeEventEnabled
    • Eventos: BelowRange() - WithinRange() - AboveRange()
    • Métodos: GetDistance()
  7. NxtDrive:
    • Propiedades: BluetoothClient - DriveMotors - WheelDiameter - StopBeforeDisconnect
    • Métodos: MoveForwardIndefinitely (potencia número) - MoveForward (número potencia, distancia número) - MoveBackwardIndefinitely (potencia número) - MoveBackward (número potencia, distancia número) - Stop() - TurnClockwiseIndefinitely (potencia número) - TurnCounterClockwiseIndefinitely (potencia número) 

Otros Componentes


  1. ActivityStarter (Arranque de actividades):
    • Propiedades ==> Action : texto - ActivityClass : texto - ActivityPackage : texto - DataUri : texto - ExtraKey : texto - ExtraValue : texto - Result: texto - ResultName: texto - ResultType: texto - ResultUri : texto
    • Eventos: ActivityError(text message) - AfterActivity(text result)
    • Métodos: ResolveActivity() - StartActivity()
  2. BarcodeScanner (Lector de código de barras):
    • Propiedades: Result
    • Métodos: DoScan()
    • Eventos: AfterScan(text result)
  3. BluetoothClient (Cliente de Bluetooth):
    • Propiedades: AddressesAndNames - Available - CharacterEncoding - DelimiterByte - Enabled - HighByteFirst - IsConnected
    • Métodos: BytesAvailableToReceive() - Connect(address) - ConnectWithUUID(address, uuid) - Disconnect() - IsDevicePaired(address) - ReceiveSigned1ByteNumber() - number ReceiveSigned2ByteNumber() - number ReceiveSigned4ByteNumber() - ReceiveSignedBytes(numberOfBytes) - ReceiveText(numberOfBytes) - ReceiveUnsigned1ByteNumber() - ReceiveUnsigned2ByteNumber() - ReceiveUnsigned4ByteNumber() - ReceiveUnsignedBytes(numberOfBytes):lista - Send1ByteNumber(number) - Send2ByteNumber(number) - Send4ByteNumber(number) - SendBytes(list) - SendText(text)
  4. BluetoothServer (Servidor de Bluetooth):
    • Propiedades ==> Available: lógico - CharacterEncoding: texto - DelimiterByte: número - Enabled: lógico - HighByteFirst: lógico - IsAccepting: lógico - IsConnected: lógico
    • Eventos: ConnectionAccepted()
    • Métodos: AcceptConnection(serviceName :texto) - AcceptConnectionWithUUID(serviceName :texto, uuid :texto) - BytesAvailableToReceive() :número - Disconnect() - ReceiveSigned1ByteNumber(): número - ReceiveSigned2ByteNumber(): número - ReceiveSigned4ByteNumber() :número - ReceiveSignedBytes(number numberOfBytes) :lista - ReceiveText(number numberOfBytes):texto - ReceiveUnsigned1ByteNumber():número - ReceiveUnsigned2ByteNumber() :número - ReceiveUnsigned4ByteNumber():número - ReceiveUnsignedBytes(number numberOfBytes):lista - Send1ByteNumber(number :texto) - Send2ByteNumber(number :texto) - Send4ByteNumber(number :texto) - SendBytes(list :lista) - SendText(text :texto) - StopAccepting()
  5. Notifier (Notificador):
    • Métodos: ShowMessageDialog(message :texto, title :texto, buttonText :texto) - ShowChooseDialog(message :texto, title :texto, button1Text :text, button2Text :texto) - ShowTextDialog(message :texto, title :texto) - ShowAlert(message :texto) - LogError(message:texto)
    • Eventos: AfterChoosing(choice :texto) - AfterTextInput(response :texto)
  6. SpeechRecognizer (Reconocedor de voz):
    • Propiedades: Result
    • Métodos: GetText()
    • Eventos: AfterGetting(result :texto) - BeforeGettingText()
  7. TextToSpeech (Sintetizador de voz):
    • Propiedades: Country - Language - Result
    • Métodos: Speak(message :texto)
    • Eventos: AfterSpeaking(result :lógico) - BeforeSpeaking()
  8. TinyWebDB (base de datos web)
    • Propiedades: ServiceURL
    • Eventos: GotValue(tagFromWebDB :texto, valueFromWebDB :cualquiera) - ValueStored() - WebServiceError(text message)
    • Métodos: GetValue(tag :texto) - StoreValue(tag :texto, valueToStore :cualquiera)
  9. Web
    • Propiedades: AllowCookies - RequestHeaders - ResponseFileName - SaveResponse - Url
    • Eventos: GotFile(text url, number responseCode, text responseType, text fileName) - GotText(text url, number responseCode, text responseType, text responseContent)
    • Métodos ==> BuildPostData : texto (list :lista) - ClearCookies() - Get() - HtmlTextDecode : texto (htmlText : texto) - JsonTextDecode : texto (jsonText :texto) - PostFile(path :texto) - PostText(text :texto) - PostTextWithEncoding(text : texto, encoding :texto) - ResponseFileName - UriEncode :texto(text :texto)

Visor  - Componentes y Propiedades

Estas tres secciones están relacionadas, ya que en el visor vemos todos los componentes, donde al seleccionarlos, muestra las propiedades del mismo y permite su edición.
En las siguientes imágenes vemos que el Screen que vemos en el Visor (3), es el componente seleccionado (4), y muestra las propiedades(5) del mismo

Visor de App Inventor 2
Visor de App Inventor 2

Componentes en el visor de App Inventor
Componentes en el visor de App Inventor

Propiedades de componentes en el visor de App Inventor
Propiedades de componentes en el visor de App Inventor


Bibliografía / Webgrafía:
http://www.senasofiaplus.edu.co
https://sites.google.com/site/aprendeappinventor/
http://appinventor.mit.edu/explore/
http://es.wikipedia.org/wiki/Android
http://www.tuappinvetorandroid.com
https://sites.google.com/site/aprendeappinventor/
http://webadictos.com/2011/06/04/como-crear-una-aplicacion-para-android-app- inventor/


Comentarios