Está en la página 1de 161

BlackBerry Java SDK

UI and Navigation Versin: 6.0


Gua de desarrollo

Publicado: 2010-12-21 SWD-1239696-1223125741-005

Contenido
1 Crear una interfaz de usuario que sea coherente con las interfaces de usuario estndar de BlackBerry........ 2 Escritura y navegacin del usuario de dispositivos BlackBerry......................................................................... Pantalla tctil.................................................................................................................................................... Bola de desplazamiento o panel tctil.............................................................................................................. Sensibilidad de la bola de desplazamiento................................................................................................ Movimiento de la bola de desplazamiento............................................................................................... Rueda de desplazamiento................................................................................................................................. Teclado.............................................................................................................................................................. Mtodos de interaccin en dispositivos BlackBerry......................................................................................... 3 Pantallas............................................................................................................................................................ Clases Screen.................................................................................................................................................... Gestionar un rea de dibujo............................................................................................................................. Crear una transicin de pantalla....................................................................................................................... Ejemplo de cdigo: crear una transicin de pantalla................................................................................ Especificar la orientacin y la direccin de la pantalla..................................................................................... Recuperar la orientacin de la pantalla tctil............................................................................................ Restringir la direccin de la pantalla tctil................................................................................................. Recibir una notificacin cuando el tamao del rea de dibujo de la pantalla tctil cambie..................... 4 Acelermetro.................................................................................................................................................... Tipos de datos del acelermetro...................................................................................................................... Recuperar datos del acelermetro................................................................................................................... Recuperar los datos del acelermetro a intervalos especficos........................................................................ Consultar al acelermetro cuando la aplicacin se encuentra en primer plano.............................................. Consultar al acelermetro cuando la aplicacin se encuentra en segundo plano........................................... Almacenar las lecturas del acelermetro en un bfer...................................................................................... Recuperar las lecturas del acelermetro desde el bfer.................................................................................. Obtener la hora a la que se efectu una lectura del acelermetro.................................................................. 5 Eventos............................................................................................................................................................. Responder a eventos de navegacin................................................................................................................ Determinar el tipo de mtodo de entrada....................................................................................................... Modelos de interaccin con la pantalla tctil................................................................................................... Responder a los eventos de pantalla tctil....................................................................................................... Responder a eventos de sistema mientras el usuario toca la pantalla...................................................... Responder a un usuario deslizando rpidamente un dedo hacia arriba en la pantalla............................. 6 7 7 9 9 9 10 10 10 12 12 13 14 15 16 18 18 18 19 19 19 20 21 21 22 23 23 24 24 24 25 26 27 27

Responder a un usuario deslizando rpidamente un dedo hacia abajo en la pantalla............................. Responder a un usuario deslizando un dedo hacia la izquierda rpidamente en la pantalla.................... Responder a un usuario deslizando un dedo hacia la derecha rpidamente en la pantalla..................... Responder a un usuario haciendo clic en la pantalla................................................................................ Responder a un usuario tocando la pantalla dos veces rpidamente....................................................... Responder a un usuario tocando y arrastrando un elemento en la pantalla............................................ Responder a un usuario tocando la pantalla ligeramente......................................................................... Responder a una accin de desplazamiento............................................................................................. Responder a un usuario tocando la pantalla en dos ubicaciones al mismo tiempo.................................. Gestos de pellizco............................................................................................................................................. Activar los gestos para pellizcar................................................................................................................. Desplazamientos con paneles tctiles.............................................................................................................. Activar los deslizamientos que los usuarios realizan en el panel tctil..................................................... Inyeccin de eventos........................................................................................................................................ 6 API de marco de comandos.............................................................................................................................. Utilizar un comando con un componente de la interfaz de usuario................................................................. Utilizar un comando en una o ms aplicaciones............................................................................................... 7 Disponer los componentes de la interfaz de usuario....................................................................................... Distribuir los componentes de la interfaz de usuario....................................................................................... Crear un diseo de cuadrcula.......................................................................................................................... Crear un diseo de cuadrcula................................................................................................................... Mostrar campos en un par temporal de gestores............................................................................................ Mostrar los valores ButtonField y LabelField temporalmente en la parte superior e inferior de la pantalla ................................................................................................................................................................... Mostrar un campo en una posicin absoluta en la pantalla............................................................................. Mostrar una etiqueta en una posicin absoluta en la pantalla................................................................. Ejemplo de cdigo: mostrar una etiqueta en una posicin absoluta en la pantalla.................................. 8 Componentes de la interfaz de usuario............................................................................................................ Agregar un componente de interfaz de usuario a una pantalla....................................................................... Alinear un campo con una lnea de texto......................................................................................................... Botones............................................................................................................................................................. Prctica recomendada: implementar botones.......................................................................................... Crear un botn........................................................................................................................................... Casillas de verificacin...................................................................................................................................... Prctica recomendada: implementar casillas de verificacin.................................................................... Crear una casilla de verificacin................................................................................................................

28 29 29 30 31 31 32 32 33 34 34 35 36 37 38 39 40 43 44 44 46 48 48 50 51 52 53 53 53 53 54 54 55 55 56

Crear un mapa de bits....................................................................................................................................... Crear un campo personalizado......................................................................................................................... Creacin de un campo para mostrar contenido Web....................................................................................... Mostrar contenido HTML en un campo de navegador.............................................................................. Mostrar contenido HTML de una pgina Web en un campo de navegador.............................................. Mostrar contenido HTML de un recurso en su aplicacin......................................................................... Configurar un campo de navegador.......................................................................................................... Enviar datos de formularios a una direccin Web en un campo de navegador........................................ Cuadros de dilogo........................................................................................................................................... Prctica recomendada: implementar cuadros de dilogo......................................................................... Crear un cuadro de dilogo....................................................................................................................... Listas desplegables........................................................................................................................................... Prctica recomendada: implementar listas desplegables......................................................................... Crear una lista desplegable........................................................................................................................ Etiquetas........................................................................................................................................................... Prctica recomendada: implementar etiquetas........................................................................................ Crear una etiqueta de texto...................................................................................................................... Listas y tablas.................................................................................................................................................... Prctica recomendada: implementar listas y tablas.................................................................................. Crear un cuadro de lista............................................................................................................................. Botones de opcin............................................................................................................................................ Prctica recomendada: implementar botones de opcin......................................................................... Crear un botn de opcin.......................................................................................................................... Indicadores de actividad e indicadores de progreso........................................................................................ Prctica recomendada: implementar indicadores de actividad e indicadores de progreso...................... Indicar el progreso de la actividad o de la tarea........................................................................................ Colectores......................................................................................................................................................... Prctica recomendada: implementar colectores....................................................................................... Crear un colector de fechas....................................................................................................................... Crear un colector de archivos.................................................................................................................... Buscar............................................................................................................................................................... Prctica recomendada: implementar bsquedas...................................................................................... Crear un campo de bsqueda.................................................................................................................... Campos de texto con la funcin Autocompletar....................................................................................... Casillas de seleccin numrica.......................................................................................................................... Crear una casilla de seleccin numrica.................................................................................................... Prctica recomendada: implementar casillas de seleccin numrica....................................................... Campos de texto............................................................................................................................................... Prctica recomendada: implementar campos de texto............................................................................

58 58 61 61 62 64 65 67 69 70 72 72 73 73 76 76 76 76 79 79 81 82 82 84 85 86 93 95 95 97 100 102 102 104 110 111 113 113 115

Crear un campo de texto........................................................................................................................... Crear un campo de fecha........................................................................................................................... Crear un campo de contrasea................................................................................................................. Vistas de rbol.................................................................................................................................................. Prctica recomendada: implementar vistas de rbol................................................................................ Crear un campo para mostrar una vista de rbol...................................................................................... 9 Imgenes........................................................................................................................................................... Uso de imgenes cifradas................................................................................................................................. Acceder a una imagen cifrada a travs de un flujo de entrada................................................................. Cifrar una imagen...................................................................................................................................... Mostrar una imagen cifrada...................................................................................................................... Especificar el tamao de la pantalla de una imagen cifrada..................................................................... Especificar el modo de descodificacin de una imagen............................................................................ Visualizacin de una imagen acercndola, alejndola y desplazndola........................................................... Cdigo de ejemplo: visualizacin de una imagen acercndola, alejndola y desplazndola.................... Mostrar una imagen acercndola, alejndola y desplazndola................................................................. Visualizacin de una fila de imgenes para realizar desplazamientos............................................................. Ejemplo de cdigo: visualizar una fila de imgenes para realizar desplazamientos................................. Mostrar una fila de imgenes para realizar desplazamientos................................................................... 10 Opciones de men............................................................................................................................................ Crear un men.................................................................................................................................................. Ejemplo de cdigo: crear un men............................................................................................................ Prctica recomendada: implementar mens.................................................................................................... Submens......................................................................................................................................................... Prctica recomendada: implementar submens....................................................................................... Crear un submen..................................................................................................................................... Ejemplo de cdigo: crear un submen...................................................................................................... Mens emergentes........................................................................................................................................... Prctica recomendada: implementar mens emergentes........................................................................ Acerca de la colocacin de elementos en los mens emergentes............................................................ Compatibilidad con los mens contextuales heredados........................................................................... Crear un men emergente........................................................................................................................ Agregar un elemento de men a una aplicacin de BlackBerry Device Software............................................ Agregar un elemento de men a una aplicacin de BlackBerry Device Software..................................... Cambiar la apariencia de un men................................................................................................................... Cambiar la apariencia de un men............................................................................................................ Ejemplo de cdigo: cambiar la apariencia de un men.............................................................................

115 116 117 117 118 118 120 120 120 120 121 121 121 121 122 122 123 123 124 127 127 128 129 129 131 131 133 134 135 136 136 137 142 142 143 143 145

11 Fuentes personalizadas..................................................................................................................................... 147 Instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application............................ 147 Ejemplo de cdigo: instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application .......................................................................................................................................................................... 148 12 Verificacin ortogrfica.................................................................................................................................... 150 Agregar la funcionalidad de verificacin ortogrfica........................................................................................ 150 Escuchar un evento de verificacin ortogrfica................................................................................................ 151 13 Recursos relacionados...................................................................................................................................... 152 14 Glosario............................................................................................................................................................. 153 15 Comentarios..................................................................................................................................................... 154 16 Historial de revisin del documento................................................................................................................. 155 17 Aviso legal......................................................................................................................................................... 157

Gua de desarrollo

Crear una interfaz de usuario que sea coherente con las interfaces de usuario estndar de BlackBerry

Crear una interfaz de usuario que sea coherente con las interfaces de usuario estndar de BlackBerry

Puede utilizar las API estndar de MIDP y las API de la interfaz de usuario de BlackBerry para crear la interfaz de usuario de BlackBerry Java Application. Los componentes de la interfaz de usuario en las API de la interfaz de usuario de BlackBerry se han diseado para proporcionar diseos y comportamientos que sean consistentes con las aplicaciones de BlackBerry Device Software. El uso de estas API no slo le permite utilizar los componentes con los que los usuarios de BlackBerry estn familiarizados, sino que tambin le ahorrar tiempo puesto que no tendr que crear dichos componentes usted mismo. Los componentes de la pantalla pueden proporcionar un diseo de pantalla estndar, un men predeterminado y un comportamiento estndar cuando el usuario del dispositivo BlackBerry pulsa la tecla Escape, hace clic en el panel tctil o toca la pantalla. Los componentes del campo pueden proporcionar elementos de interfaz de usuario estndar para la seleccin de fechas, los botones de opcin, las casillas de verificacin, las listas, los campos de texto, las etiquetas y los controles de la barra de progreso. Los administradores de diseo pueden proporcionar una aplicacin con la capacidad de distribuir los componentes en una pantalla de dispositivo BlackBerry de forma estndar, tanto horizontalmente como verticalmente, o en un eje izquierda a derecha.

Puede utilizar las API de la interfaz de usuario de BlackBerry para crear una interfaz de usuario que incluya tablas, cuadrcula y otras caractersticas especializadas. Puede utilizar un modelo de evento de Java estndar para recibir y responder a tipos especficos de eventos. Una aplicacin del dispositivo BlackBerry puede recibir y responder a los eventos de usuario, como cuando el usuario hace clic en la rueda de desplazamiento o escribe en el teclado, y a eventos de sistema, como las alertas globales, los cambios del reloj y las conexiones del puerto USB.

Gua de desarrollo

Escritura y navegacin del usuario de dispositivos BlackBerry

Escritura y navegacin del usuario de dispositivos BlackBerry

Los dispositivos BlackBerry incluyen un teclado, una rueda o bola de desplazamiento, o un panel tctil y una tecla Escape para la escritura y navegacin. En dispositivos BlackBerry con una pantalla tctil SurePress, hacer clic en la pantalla es el equivalente a hacer clic en la bola o en la rueda de desplazamiento. BlackBerry Java Application debe seguir el siguiente modelo de escritura y navegacin en la medida de lo posible. Al hacer clic en la rueda o bola de desplazamiento o en el panel tctil, normalmente se invoca un men. Al pulsar la tecla Escape se cancelan acciones o se vuelve a la pantalla anterior. Al pulsar la tecla Escape varias veces los usuarios vuelven a la pantalla de inicio. Manteniendo pulsada la tecla Escape se cierra el navegador o la aplicacin Multimedia.

De forma predeterminada, los objetos de pantalla de BlackBerry ofrecen esta funcionalidad sin personalizacin; sin embargo, debe agregar elementos del men, as como una interfaz de usuario adicional y lgica de navegacin.

Pantalla tctil
En dispositivos BlackBerry con pantalla tctil SurePress, los usuarios utilizan un dedo para interactuar con las aplicaciones del dispositivo. Los usuarios escriben texto y navegan a travs de las pantallas realizando distintas acciones en la pantalla tctil. Los usuarios tambin pueden realizar acciones haciendo clic en los iconos de la barra de atajos o pulsando la tecla Men. En dispositivos BlackBerry con una pantalla tctil, los usuarios pueden realizar las siguientes acciones: Accin tocar la pantalla ligeramente Resultado Esta accin selecciona un elemento. En un campo de texto, si los usuarios tocan la pantalla cerca del cursor, se muestra un cuadro sealado alrededor del cursor. Este cuadro ayuda a los usuarios a volver a colocar el cursor ms fcilmente. En las aplicaciones que son compatibles con una vista de pantalla completa, por ejemplo, BlackBerry Maps y BlackBerry Browser, esta accin oculta y muestra la barra de atajos. En una pgina Web, en un mapa, en una imagen o en un archivo adjunto de presentacin, esta accin acerca la pgina Web, el mapa, la imagen o el archivo adjunto de presentacin. En la barra de atajos, esta accin muestra una sugerencia que describe la accin que el icono representa.

puntear en la pantalla

puntear en la pantalla dos veces

mantener un dedo sobre un elemento

Gua de desarrollo

Pantalla tctil

Accin

Resultado En una lista de mensajes, si los usuarios mantienen un dedo sobre el emisor o el asunto de un mensaje, el dispositivo BlackBerry busca el emisor o el asunto. tocar y arrastrar un elemento sobre Esta accin mueve el contenido en la pantalla en la direccin la pantalla correspondiente. Por ejemplo, cuando los usuarios tocan y arrastran un elemento del men, la lista de elementos del men se mueve en la misma direccin. En un campo de texto, esta accin mueve el cuadro sealado y el cursor en la misma direccin. Esta accin selecciona el texto o la lista de elementos, por ejemplo, mensajes, entre las dos ubicaciones. Para agregar o eliminar texto o elementos seleccionados, los usuarios pueden tocar la pantalla en otra ubicacin. Esta accin inicia una accin. Por ejemplo, cuando los usuarios hacen clic en un elemento de una lista, aparece la pantalla que est asociada con el elemento. Esta accin equivale a hacer clic en la rueda o la bola de desplazamiento o en el panel tctil. En un mapa, en una imagen o en un archivo adjunto de presentacin, esta accin acerca el mapa, la imagen o el archivo adjunto de presentacin. En una pgina Web, esta accin acerca la pgina Web o sigue un vnculo. En un campo de texto, esta accin coloca el cursor. Si el campo contiene texto, aparece un cuadro resaltado alrededor del cursor. Al deslizar rpidamente un dedo hacia arriba se muestra la pantalla siguiente. Al deslizar rpidamente un dedo hacia abajo se muestra la pantalla anterior. Cuando aparece el teclado, al deslizar rpidamente un dedo hacia abajo se oculta el teclado y muestra la barra de atajos. Esta accin muestra la imagen o el mensaje siguiente o anterior, o bien el da, semana o mes siguiente o anterior en un calendario. En la cmara, al deslizar un dedo hacia arriba se ampla el objeto. Al deslizar un dedo hacia abajo se reduce el objeto. Esta accin ofrece una panormica de un mapa o de una pgina Web. Si los usuarios amplan una imagen, esta accin tambin nos ofrecer una panormica de la imagen. Esta accin elimina el efecto resaltado del texto o una lista de elementos. En una pgina Web, en un mapa o en una imagen, esta accin reduce la imagen un nivel. Los usuarios pueden pulsar la tecla Escape hasta retroceder a la vista original.

tocar la pantalla en dos ubicaciones al mismo tiempo

hacer clic (pulsar) en la pantalla

deslizar un dedo hacia arriba o hacia abajo rpidamente sobre la pantalla

deslizar un dedo hacia la izquierda o la derecha rpidamente sobre la pantalla deslizar un dedo hacia arriba o hacia abajo sobre la pantalla deslizar un dedo en cualquier direccin pulsar la tecla Escape

Gua de desarrollo

Bola de desplazamiento o panel tctil

Bola de desplazamiento o panel tctil


En dispositivos BlackBerry con bola de desplazamiento o panel tctil, la bola de desplazamiento o panel tctil es el principal control para la navegacin de usuario. Los usuarios pueden realizar las siguientes acciones: Girar la bola de desplazamiento o deslizar el dedo en el panel tctil para mover el cursor. Hacer clic en la bola de desplazamiento o panel tctil para llevar a cabo acciones predeterminadas o abrir un men contextual. Hacer clic en la bola de desplazamiento o panel tctil al tiempo que se pulsa la tecla Maysculas para seleccionar texto o bien seleccionar mensajes en una lista de mensajes.

Los dispositivos BlackBerry con una bola de desplazamiento o panel tctil tambin incluyen una tecla Men ubicada a la izquierda de la bola de desplazamiento o panel tctil. Los usuarios pueden pulsar la tecla Men para abrir un men completo de acciones disponibles.

Sensibilidad de la bola de desplazamiento


La sensibilidad de la bola de desplazamiento se refiere a la cantidad de movimiento que la bola necesita para que el sistema identifique el movimiento como un evento de navegacin y para enviar un evento de navegacin a la capa de software. El hardware del dispositivo BlackBerry mide el movimiento fsico de la bola de desplazamiento mediante unidades denominadas tics. Si el nmero de tics a lo largo de un eje supera el umbral del sistema o de una aplicacin del dispositivo BlackBerry, se enva un evento de navegacin a lo largo de ese eje en la capa del software y el sistema restablece el recuento de tics en cero. Los recuentos de tics tambin se restablecen en cero una vez se supera cierto tiempo de inactividad. Puede utilizar la API de la bola de desplazamiento para establecer la sensibilidad de la bola de desplazamiento. Una sensibilidad alta de la bola de desplazamiento equivale a un umbral de tics ms pequeo (lo que significa que pequeos movimientos de la bola de desplazamiento activarn eventos de navegacin). Una sensibilidad baja de la bola de desplazamiento equivale a un umbral mayor de tics (lo cual significa que son necesarios movimientos ms grandes de la bola de desplazamiento para generar eventos de navegacin).

Movimiento de la bola de desplazamiento


Puede utilizar la API de la bola de desplazamiento para filtrar los datos de los movimientos de la bola que el hardware del dispositivo BlackBerry enva a la capa del software. La API de la bola de desplazamiento puede filtrar "el ruido de movimiento" o los movimientos no deseados. Puede utilizar tambin la API de la bola de desplazamiento para cambiar configuraciones como la aceleracin del movimiento de la bola de desplazamiento. El aumento de la configuracin de la aceleracin del movimiento de la bola de desplazamiento puede hacer que la capa de software detecte que los movimientos de la bola se mueven a una velocidad mayor que la velocidad detectada por el hardware del dispositivo BlackBerry, siempre que el usuario desplace continuamente la bola de desplazamiento. La sensibilidad de la bola de desplazamiento aumenta temporalmente a medida que el usuario desplaza la bola sin detenerse.

Gua de desarrollo

Rueda de desplazamiento

Rueda de desplazamiento
Los dispositivos BlackBerry anteriores a BlackBerry Pearl 8100 Series utilizan una rueda de desplazamiento como control principal para la navegacin de usuario. La rueda de desplazamiento se encuentra en el lado derecho del dispositivo BlackBerry. Los usuarios pueden realizar las siguientes acciones: desplazar la rueda de desplazamiento para mover el cursor verticalmente desplazar la rueda de desplazamiento mientras pulsan la tecla Alt para mover el cursor horizontalmente hacer clic en la rueda de desplazamiento para iniciar una accin o abrir el men

Teclado
Los usuarios utilizan el teclado principalmente para escribir texto. Las teclas de caracteres envan un carcter al dispositivo BlackBerry. Una tecla modificadora modifica la funcionalidad de las teclas de caracteres. Las teclas modificadoras incluyen la tecla Maysculas y la tecla Alt. Cuando los usuarios pulsan una tecla modificadora, aparece un indicador de modo de escritura en la esquina superior derecha de la pantalla. En dispositivos BlackBerry sin pantalla tctil, los usuarios tambin pueden utilizar el teclado para desplazar la pantalla (por ejemplo, para desplazar un mapa). Sin embargo, la navegacin a travs del teclado debe ser siempre una alternativa a la navegacin utilizando la rueda o la bola de desplazamiento, o bien el panel tctil. Los dispositivos BlackBerry tienen un teclado completo o un teclado reducido. En dispositivos BlackBerry con pantalla tctil SurePress, en la mayora de los casos, el teclado completo aparece en la vista horizontal y el teclado reducido aparece en la vista vertical.

Mtodos de interaccin en dispositivos BlackBerry


Modelo de dispositivo BlackBerry BlackBerry 7100 Series BlackBerry 8700 Series BlackBerry 8800 Series Smartphone BlackBerry Bold 9000 BlackBerry Bold 9650 smartphone Smartphone BlackBerry Bold 9700 BlackBerry Curve 8300 Series BlackBerry Curve 8500 Series Smartphone BlackBerry Curve 8900 BlackBerry Pearl 8100 Series BlackBerry Pearl Flip 8200 Series BlackBerry Storm 9500 Series
10

Mtodo de interaccin rueda de desplazamiento rueda de desplazamiento bola de desplazamiento bola de desplazamiento panel tctil bola de desplazamiento panel tctil bola de desplazamiento bola de desplazamiento bola de desplazamiento pantalla tctil

Gua de desarrollo

Mtodos de interaccin en dispositivos BlackBerry

Modelo de dispositivo BlackBerry Smartphone BlackBerry Tour 9630

Mtodo de interaccin bola de desplazamiento

11

Gua de desarrollo

Pantallas

Pantallas
El principal componente de la interfaz de usuario de un dispositivo BlackBerry es el objeto Screen.

Un dispositivo BlackBerry puede tener varias pantallas abiertas al mismo tiempo, pero slo se podr mostrar una pantalla al mismo tiempo. BlackBerry Java Virtual Machine mantiene un conjunto ordenado de objetos Screen en una pila de visualizacin. El objeto Screen situado en la parte superior de la pila es el objeto Screen activo que ve el usuario del dispositivo BlackBerry. Cuando una aplicacin del dispositivo BlackBerry muestra una pantalla, insertar el objeto Screen en la parte superior de la pila. Cuando una aplicacin del dispositivo BlackBerry cierra una pantalla, retirar el objeto Screen de la parte superior de la pila y mostrar el siguiente objeto Screen de la pila, redibujando la pantalla tal como sea necesario. Cada objeto Screen puede aparecer slo una vez en la pila de visualizacin. BlackBerry JVM agrega una excepcin en tiempo de conexin si el objeto Screen que la aplicacin del dispositivo BlackBerry inserta en la pila ya existe. La aplicacin del dispositivo BlackBerry deber retirar un objeto Screen de la pila de visualizacin cuando el usuario finalice el proceso de interaccin con la pantalla, de forma que la aplicacin del dispositivo BlackBerry pueda utilizar la memoria de forma eficaz. Debe utilizar slo algunos objetos Screen de modo al mismo tiempo, ya que cada pantalla utiliza un subproceso independiente. Las API de la interfaz de usuario inicializan objetos Screen sencillos. Una vez haya creado un objeto Screen, podr agregar campos y un men y mostrar el objeto Screen al usuario insertndolo en la pila de visualizacin. Puede cambiar la interfaz de usuario del dispositivo BlackBerry e implementar nuevos tipos de campos, tal como considere necesario. Tambin puede agregar navegacin personalizada. La clase Screen no puede implementar la desambiguacin, sta es necesaria para los mtodos de entrada complejos, por ejemplo, teclados internacionales. Para la integracin de los distintos mtodos de entrada, puede ampliar la clase Field o una de sus subclases. No debe utilizar objetos Screen para escribir texto.

Clases Screen
Clase
Screen

FullScreen

MainScreen

Descripcin Puede utilizar la clase Screen para crear una pantalla y utilizar un gestor de diseo para ordenar los componentes de la interfaz de usuario en la pantalla. Puede definir un tipo especfico de pantalla utilizando los estilos que definen las constantes en la superclase Field. Puede utilizar la clase FullScreen para crear una pantalla vaca a la que agregar componentes de la interfaz de usuario en un diseo vertical estndar. Si desea utilizar otro estilo de diseo, por ejemplo, horizontal o diagonal, puede utilizar la clase Screen en su lugar y agregar un gestor de diseo a la misma. Puede utilizar la clase MainScreen para crear una pantalla con los siguientes componentes estndar de la interfaz de usuario:

12

Gua de desarrollo

Gestionar un rea de dibujo

Clase

Descripcin ttulo de la pantalla predeterminada, con un valor SeparatorField despus del ttulo seccin desplazable principal contenida en un valor
VerticalFieldManager

men predeterminado con un elemento de men Cerrar accin de cierre predeterminada que cierra la pantalla cuando el usuario del dispositivo BlackBerry hace clic en el elemento de men Cerrar o pulsa la tecla Escape

Debe considerar el uso de un objeto MainScreen para la primera pantalla de la aplicacin del dispositivo BlackBerry con el fin de mantener la coherencia con otras aplicaciones del dispositivo BlackBerry.

Gestionar un rea de dibujo


El objeto Graphics representa la superficie de dibujo al completo disponible en la aplicacin del dispositivo BlackBerry. Para limitar esta rea, divdalo en objetos XYRect. Cada XYPoint representa un punto en la pantalla, que est compuesto por una coordenada X y una coordenada Y. 1. Importe las siguientes clases: net.rim.device.api.ui.Graphics net.rim.device.api.ui.XYRect net.rim.device.api.ui.XYPoint Cree objetos XYPoint, para representar el punto izquierdo superior y el punto derecho inferior de un rectngulo. Cree un objeto XYRect mediante los objetos XYPoint, para crear una regin de corte rectangular.
XYPoint bottomRight = new XYPoint(50, 50); XYPoint topLeft = new XYPoint(10, 10); XYRect rectangle = new XYRect(topLeft, bottomRight);

2.

3.

Invoque Graphics.pushContext() para realizar llamadas de dibujo que especifiquen que el origen de la regin no debe ajustar el desplazamiento del dibujo. Invoque Graphics.pushContext() para insertar la regin de corte rectangular en la pila de contexto. Invoque Graphics.drawRect() para dibujar un rectngulo, a continuacin, invoque Graphics.fillRect() para rellenar el rectngulo. Invoque Graphics.popContext () para extraer el contexto actual de la pila de contexto.
graphics.pushContext(rectangle, 0, 0); graphics.fillRect(10, 10, 30, 30); graphics.drawRect(15, 15, 30, 30); graphics.popContext(); graphics.drawRect(15, 15, 30, 30); graphics.pushContext(rectangle, 0, 0); graphics.fillRect(10, 10, 30, 30); graphics.drawRect(15, 15, 30, 30); graphics.popContext(); graphics.drawRect(15, 15, 30, 30); 13

Gua de desarrollo

Crear una transicin de pantalla

4.

Invoque pushRegion() y especifique que el origen de la regin debe ajustar el desplazamiento del dibujo. Invoque Graphics.drawRect() para dibujar un rectngulo e invoque Graphics.fillRect() para rellenar el rectngulo. Invoque Graphics.popContext() para extraer el contexto actual de la pila de contexto.
graphics.pushRegion(rectangle); graphics.fillRect(10, 10, 30, 30); graphics.drawRect(15, 15, 30, 30); graphics.popContext();

5. 6.

Especifique la parte del objeto Graphics que se va a insertar en la pila. Despus de invocar pushContext() (o pushRegion()), proporcione la parte del objeto Graphics que se va a invertir.
graphics.pushContext(rectangle); graphics.invert(rectangle); graphics.popContext();

7.

Invoque translate(). El valor XYRect se traduce de su origen de (1, 1) a un origen de (20, 20). Despus de la traduccin, la parte inferior del objeto XYRect se ampla ms all de los lmites del contexto de Graphics y lo recorta.
XYRect rectangle = new XYRect(1, 1, 100, 100); XYPoint newLocation = new XYPoint(20, 20); rectangle.translate(newLocation);

Crear una transicin de pantalla


Puede crear una transicin de pantalla para aplicar un efecto visual que aparezca cuando su aplicacin abra o cierre una pantalla en un dispositivo BlackBerry. Puede crear los siguientes tipos de transiciones de pantalla para su aplicacin mediante la clase net.rim.device.api.ui.TransitionContext. Transicin
TRANSITION_FADE

TRANSITION_SLIDE

TRANSITION_WIPE TRANSITION_ZOOM TRANSITION_NONE

Descripcin Esta transicin revela o elimina una pantalla hacindola aparecer o desaparecer. Esta transicin de la pantalla crea un efecto visual de atenuacin al cambiar la opacidad de la pantalla. Esta transicin revela o elimina una pantalla desplazndola y hacindola aparecer o desaparecer de la pantalla del dispositivo. Puede utilizar atributos para especificar que tanto la pantalla nueva como la actual se deslicen, para crear un efecto en el que ambas pantallas parezcan moverse o para que la nueva pantalla se deslice sobre la actual. Esta transicin revela o elimina una pantalla simulando el borrado y hacindola aparecer o desaparecer de la pantalla del dispositivo. Esta transicin revela o elimina una pantalla acercndola o alejndola en la pantalla del dispositivo. No ocurre ninguna transicin.

14

Gua de desarrollo

Crear una transicin de pantalla

Cada tipo de la transicin de pantalla tiene atributos que puede utilizar para personalizar los efectos visuales de la transicin de pantalla. Por ejemplo, puede personalizar un efecto de deslizamiento para que una pantalla se deslice desde la parte inferior de la pantalla en el dispositivo a la parte superior de la misma. Si no personaliza la transicin de pantalla, la aplicacin utiliza los atributos predeterminados. Para obtener ms informacin acerca de los atributos predeterminados, consulte la referencia de API de BlackBerry Java Development Environment. Despus de crear una transicin de pantalla, debe registrarla en la aplicacin invocando UiEngineInstance.setTransition() y especificar la pantalla de salida que se va a eliminar y la pantalla de entrada que va a aparecer, los eventos que dan lugar a la transicin y la transicin que se va a mostrar. Para descargar una aplicacin de ejemplo que demuestre cmo utilizar las transiciones de pantalla, visite www.blackberry.com/go/screentransitionssample. Para obtener ms informacin acerca de las transiciones de pantalla, consulte la referencia API de BlackBerry Java Development Environment. Nota: El tema del dispositivo BlackBerry controla los efectos visuales que se muestran cuando un usuario abre una aplicacin. Para obtener ms informacin, consulte la Gua del usuario de BlackBerry Theme Studio .

Ejemplo de cdigo: crear una transicin de pantalla


El siguiente ejemplo de cdigo muestra una transicin de pantalla y una transicin con atenuacin. Siempre que el usuario abre la aplicacin, la primera pantalla aparece en el dispositivo BlackBerry y muestra un botn. Cuando el usuario hace clic en el botn, una segunda pantalla se introduce sobre la anterior desde la derecha. La segunda pantalla atena automticamente la primera pasados dos segundos.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.decor.*; public class ScreenTransitionSample extends UiApplication implements FieldChangeListener { private Screen _secondaryScreen; private Runnable _popRunnable; public static void main(String[] args) { ScreenTransitionSample theApp = new ScreenTransitionSample (); theApp.enterEventDispatcher(); } public ScreenTransitionSample () { _secondaryScreen = new FullScreen(); _secondaryScreen.setBackground( BackgroundFactory.createSolidBackground(Color.LIGHTBLUE) ); LabelField labelField = new LabelField("The screen closes automatically in two seconds by using a fade transition"); _secondaryScreen.add(labelField); TransitionContext transition = new TransitionContext(TransitionContext.TRANSITION_SLIDE); transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500); transition.setIntAttribute(TransitionContext.ATTR_DIRECTION, TransitionContext.DIRECTION_RIGHT); transition.setIntAttribute(TransitionContext.ATTR_STYLE, TransitionContext.STYLE_PUSH); UiEngineInstance engine = Ui.getUiEngineInstance(); engine.setTransition(null, _secondaryScreen, UiEngineInstance.TRIGGER_PUSH,

15

Gua de desarrollo

Especificar la orientacin y la direccin de la pantalla

} public void fieldChanged(Field field, int context) { pushScreen(_secondaryScreen); invokeLater(_popRunnable, 2000, false); }

transition); transition = new TransitionContext(TransitionContext.TRANSITION_FADE); transition.setIntAttribute(TransitionContext.ATTR_DURATION, 500); transition.setIntAttribute(TransitionContext.ATTR_KIND, TransitionContext.KIND_OUT); engine.setTransition(_secondaryScreen, null, UiEngineInstance.TRIGGER_POP, transition); MainScreen baseScreen = new MainScreen(); baseScreen.setTitle("Screen Transition Sample"); ButtonField buttonField = new ButtonField("View Transition", ButtonField.CONSUME_CLICK) ; buttonField.setChangeListener(this); baseScreen.add(buttonField); pushScreen(baseScreen); _popRunnable = new Runnable() { public void run() { popScreen(_secondaryScreen); } };

Especificar la orientacin y la direccin de la pantalla


En aplicaciones de pantalla tctil, puede tener en cuenta tanto la orientacin como la direccin de la pantalla. La orientacin se refiere a la relacin de aspecto. La direccin se refiere al rea de dibujo de la pantalla.

Orientacin
El usuario de un dispositivo BlackBerry con pantalla tctil puede cambiar la orientacin de la pantalla girando el dispositivo. Si un usuario sujeta el dispositivo BlackBerry con el logotipo de BlackBerry en la parte superior, la pantalla estar en orientacin vertical. Si el usuario gira el dispositivo 90 grados a la izquierda o la derecha, la pantalla estar en orientacin horizontal. Puede utilizar la clase net.rim.device.api.system.Display para recuperar la orientacin de la pantalla. La clase Display contiene las constantes que se corresponden a las orientaciones que el dispositivo con pantalla tctil puede utilizar para mostrar informacin. Por ejemplo, las orientaciones vertical, horizontal y en cuadrado se corresponden a las constantes Display.ORIENTATION_PORTRAIT, Display.ORIENTATION_LANDSCAPE y Display.ORIENTATION_SQUARE. Para recuperar la orientacin de la pantalla, puede invocar el mtodo Display.getOrientation(). Este mtodo devuelve un entero que se corresponde a una de las orientaciones que el dispositivo BlackBerry puede utilizar. Para detectar los cambios de orientacin, puede omitir Screen.sublayout(). En ese mtodo, invoque super.sublayout() y observe cambios en los valores width y height.

Direccin
16

Gua de desarrollo

Especificar la orientacin y la direccin de la pantalla

Un dispositivo BlackBerry con una pantalla tctil puede mostrar informacin en la pantalla en direcciones diferentes. La direccin se refiere a la parte superior del rea de dibujo de la pantalla, que es relativa a la ubicacin del logotipo de BlackBerry. La direccin es norte cuando la parte superior del rea de dibujo es el lado de pantalla ms cercano al logotipo de BlackBerry; la direccin es oeste cuando la parte superior del rea de dibujo est a la izquierda del logotipo de BlackBerry; la direccin es este cuando la parte superior del rea de dibujo est a la derecha del logotipo de BlackBerry. Puede utilizar la clase net.rim.device.api.system.Display, la clase net.rim.device.api.ui.Ui y la clase net.rim.device.api.ui.UiEngineInstance para controlar la direccin que el dispositivo BlackBerry utiliza para mostrar informacin en la pantalla. La clase Display contiene las constantes que se corresponden a las direcciones que el dispositivo puede utilizar para mostrar informacin. Por ejemplo, las direcciones norte, oeste y este se corresponden con las constantes Display.DIRECTION_NORTH, Display.DIRECTION_WEST y Display.DIRECTION_EAST. Puede crear un objeto de la clase net.rim.device.api.ui.Ui e invocar Ui.getUiEngineInstance() para recuperar un objeto de la clase UiEngineInstance. Al invocar UiEngineInstance.setAcceptableDirections() con una de las constantes que se corresponden a las direcciones de la clase Display se establece la direccin que el dispositivo BlackBerry puede utilizar para mostrar informacin. Ejemplo de cdigo: recuperar la orientacin de la pantalla
switch(Display.getOrientation()) { case Display.ORIENTATION_LANDSCAPE: Dialog.alert("Screen orientation case Display.ORIENTATION_PORTRAIT: Dialog.alert("Screen orientation case Display.ORIENTATION_SQUARE: Dialog.alert("Screen orientation default: Dialog.alert("Screen orientation }

is landscape"); break; is portrait"); break; is square"); break; is not known"); break;

Ejemplo de cdigo: forzar la vista vertical en una aplicacin API de BlackBerry


// Use code like this before invoking UiApplication.pushScreen() int direction = Display.DIRECTION_NORTH; Ui.getUiEngineInstance().setAcceptableDirections(direction);

Ejemplo de cdigo: forzar la vista horizontal en una aplicacin MIDlet


// Use code like this before invoking Display.setCurrent() in the MIDlet constructor DirectionControl dc = (DirectionControl) ((Controllable) Display.getDisplay(this)). getControl("net.rim.device.api.lcdui.control.DirectionControl"); int directions = DirectionControl.DIRECTION_EAST | DirectionControl.DIRECTION_WEST; dc.setAcceptableScreenDirections(directions);

17

Gua de desarrollo

Especificar la orientacin y la direccin de la pantalla

Recuperar la orientacin de la pantalla tctil


1. 2. Importe la clase net.rim.device.api.system.Display. Invoque net.rim.device.api.system.Display.getOrientation().
int orientation = Display.getOrientation();

Restringir la direccin de la pantalla tctil


1. Importe las siguientes clases: net.rim.device.api.ui.Ui net.rim.device.api.ui.UiEngineInstance Invoque net.rim.device.api.ui.Ui.getUiEngineInstance().
UiEngineInstance _ue; _ue = Ui.getUiEngineInstance();

2.

3.

Invoque net.rim.device.api.ui.UiEngineInstance.setAcceptableDirections(byte flags) y pase el argumento para la direccin del objeto Screen.
_ue.setAcceptableDirections(Display.DIRECTION_WEST);

Recibir una notificacin cuando el tamao del rea de dibujo de la pantalla tctil cambie
1. Importe las siguientes clases: javax.microedition.lcdui.Canvas net.rim.device.api.ui.component.Dialog Ample javax.microedition.lcdui.Canvas. Omita Canvas.sizeChanged(int, int).
protected void sizeChanged(int w, int h) { Dialog.alert("The size of the Canvas has changed"); }

2. 3.

18

Gua de desarrollo

Acelermetro

Acelermetro

Los dispositivos BlackBerry con pantalla tctil incluyen un acelermetro, diseado para detectar la orientacin y aceleracin del dispositivo BlackBerry. Cuando el usuario de un dispositivo BlackBerry mueve el dispositivo BlackBerry, el acelermetro puede detectar el movimiento en 3D en los ejes X, Y y Z. El usuario de un dispositivo puede modificar la orientacin del dispositivo, que puede cambiar la direccin de visualizacin de una pantalla entre vertical y horizontal para una aplicacin de dispositivo BlackBerry. Puede utilizar las API del acelermetro, en el paquete net.rim.device.api.system, para reaccionar ante la orientacin y aceleracin del dispositivo BlackBerry. Por ejemplo, puede manipular una aplicacin de juegos para cambiar la direccin y la velocidad de un objeto mvil en la pantalla mientras un usuario mueve y gira el dispositivo BlackBerry a distintas velocidades. Para descargar una aplicacin de ejemplo que demuestre cmo utilizar el acelermetro de pantalla, visite www.blackberry.com/go/accelerometersample. Para obtener ms informacin acerca de la aplicacin de ejemplo, visite www.blackberry.com/go/devguides para leer la Descripcin general de la aplicacin de ejemplo del acelermetro.

Tipos de datos del acelermetro


Una aplicacin del dispositivo BlackBerry puede recuperar los datos del acelermetro. Tipo de datos orientacin aceleracin Descripcin La orientacin del dispositivo BlackBerry con respecto al suelo. La aceleracin de la rotacin del dispositivo BlackBerry.

Para obtener ms informacin acerca de los tipos de datos del acelermetro, consulte la referencia de API de BlackBerry Java Development Environment.

Recuperar datos del acelermetro


El acelermetro se ha diseado para seguir la direccin y velocidad del movimiento a lo largo de los ejes X, Y y Z cuando un usuario del dispositivo BlackBerry mueve el dispositivo BlackBerry. El eje X es paralelo a la anchura del dispositivo BlackBerry. El eje Y es paralelo a la longitud del dispositivo BlackBerry. El eje Z es paralelo a la profundidad (de la parte frontal a la trasera) del dispositivo BlackBerry. Para obtener ms informacin acerca de los ejes X, Y y Z del acelermetro, consulte la clase net.rim.device.api.system.AccelerometerSensor en la referencia de API para BlackBerry Java Development Environment. Puede activar una aplicacin del dispositivo BlackBerry para que reaccione a la aceleracin del dispositivo BlackBerry que incluye un acelermetro. Por ejemplo, un usuario de dispositivo BlackBerry podra mover el dispositivo BlackBerry para controlar la direccin y velocidad de un objeto que se mueve a travs de un laberinto en una aplicacin de juego.

19

Gua de desarrollo

Recuperar los datos del acelermetro a intervalos especficos

Puede utilizar las API del acelermetro, en el paquete net.rim.device.api.system, para reaccionar ante la aceleracin del dispositivo BlackBerry. Debe determinar en primer lugar si el dispositivo BlackBerry es compatible con un acelermetro invocando net.rim.device.api.system.AccelerometerSensor.isSupported(). Si el mtodo devuelve el valor true, el dispositivo BlackBerry es compatible con un acelermetro. Puede utilizar la clase AccelerometerData para identificar la direccin en la que el usuario mueve el dispositivo BlackBerry. Si se invoca AccelerometerData.getOrientation(), ste devuelve una de las constantes de la clase AccelerometerSensor que se corresponde con la direccin del dispositivo BlackBerry. Por ejemplo, si AccelerometerData.getOrientation() devuelve un valor igual a AccelerometerSensor.ORIENTATION_LEFT_UP, el lado izquierdo del dispositivo BlackBerry est hacia arriba. Puede utilizar la clase AccelerometerSensor para recuperar los datos de aceleracin del dispositivo BlackBerry. Si se invoca AccelerometerSensor.openRawDataChannel(), este devuelve un objeto de la clase net.rim.device.api.system.AccelerometerSensor.Channel. La clase AccelerometerSensor.Channel le permite abrir una conexin con el acelermetro. Puede recuperar datos del acelermetro invocando AccelerometerSensor.Channel.getLastAccelerationData(). Para mantener una conexin con el acelermetro se utiliza parte de la batera del dispositivo BlackBerry. Cuando la aplicacin del dispositivo BlackBerry ya no necesite recuperar los datos del acelermetro, debe invocar AccelerometerSensor.Channel.close() para cerrar la conexin. Cdigo de ejemplo: recuperacin de los datos del acelermetro
short[] xyz = new short[3]; while( running ) { channel.getLastAccelerationData(xyz); } channel.close();

Recuperar los datos del acelermetro a intervalos especficos


Si una aplicacin del dispositivo BlackBerry abre un canal hacia el acelermetro cuando la aplicacin se ejecuta en primer trmino, cuando la aplicacin se ejecuta en segundo plano, el canal se detiene sin consultar al acelermetro. Si una aplicacin del dispositivo BlackBerry invoca AccelerometerSensor.Channel. getLastAccelerationData(short[]) a intervalos cercanos o cuando el dispositivo BlackBerry no est en movimiento, el mtodo podra devolver valores duplicados. 1. Importe las siguientes clases: net.rim.device.api.system.AccelerometerSensor.Channel; net.rim.device.api.system.AccelerometerSensor; Abra un canal hacia el acelermetro. Mientras el canal est abierto, la aplicacin del dispositivo BlackBerry consultar al acelermetro para obtener informacin.
Channel rawDataChannel = AccelerometerSensor.openRawDataChannel ( Application.getApplication() );

2.

20

Gua de desarrollo

Consultar al acelermetro cuando la aplicacin se encuentra en primer plano

3. 4. 5. 6. 7.

Cree una matriz para almacenar los datos del acelermetro.


short[] xyz = new short[ 3 ];

Cree un subproceso.
while( running ) {

Invoque Channel.getLastAccelerationData(short[]) para recuperar los datos del acelermetro.


rawDataChannel.getLastAccelerationData( xyz );

Invoque Thread.sleep() para especificar el intervalo entre las consultas al acelermetro, en milisegundos.
Thread.sleep( 500 );

Invoque Channel.close() para cerrar el canal al acelermetro.


rawDataChannel.close();

Consultar al acelermetro cuando la aplicacin se encuentra en primer plano


1. Importe las siguientes clases: net.rim.device.api.system.AccelerometerChannelConfig net.rim.device.api.system.AccelerometerSensor.Channel Abra un canal para recuperar los datos de aceleracin del acelermetro.
Channel channel = AccelerometerSensor.openRawAccelerationChannel ( Application.getApplication());

2.

3.

Invoque Thread.sleep() para especificar el intervalo entre las consultas al acelermetro, en milisegundos.
short[] xyz = new short[ 3 ]; while( running ) { channel.getLastAccelerationData( xyz ); Thread.sleep( 500 ); }

4.

Invoque Channel.close() para cerrar el canal al acelermetro.


channel.close();

Consultar al acelermetro cuando la aplicacin se encuentra en segundo plano


1. Importe las siguientes clases: net.rim.device.api.system.AccelerometerChannelConfig; net.rim.device.api.system.AccelerometerSensor.Channel;

21

Gua de desarrollo

Almacenar las lecturas del acelermetro en un bfer

2.

Cree una configuracin para un canal hacia el acelermetro.


AccelerometerChannelConfig channelConfig = new AccelerometerChannelConfig ( AccelerometerChannelConfig.TYPE_RAW );

3.

Invoque AccelerometerChannelConfig.setBackgroundMode(Boolean) para especificar compatibilidad con una aplicacin que se encuentra en segundo plano.
channelConfig.setBackgroundMode( true );

4.

Invoque AccelerometerSensor.openChannel() para abrir un canal en segundo plano hacia el acelermetro.


Channel channel = AccelerometerSensor.openChannel( Application.getApplication(), channelConfig );

5.

Invoque Thread.sleep() para especificar el intervalo entre las consultas al acelermetro, en milisegundos.
short[] xyz = new short[ 3 ]; while( running ) { channel.getLastAccelerationData( xyz ); Thread.sleep( 500 ); }

6.

Invoque Channel.close() para cerrar el canal al acelermetro.


channel.close();

Almacenar las lecturas del acelermetro en un bfer


1. Importe las siguientes clases: net.rim.device.api.system.AccelerometerChannelConfig; net.rim.device.api.system.AccelerometerSensor.Channel; Cree una configuracin para un canal hacia el acelermetro.
AccelerometerChannelConfig channelConfig = new AccelerometerChannelConfig ( AccelerometerChannelConfig.TYPE_RAW );

2.

3.

Invoque AccelerometerChannelConfig.setSamplesCount() para especificar el nmero de lecturas de aceleracin a almacenar en el bfer. Cada elemento del bfer contiene las lecturas de aceleracin para la los ejes X, Y y Z y datos acerca de cundo tuvo lugar la lectura.
channelConfig.setSamplesCount( 500 );

4.

Invoque AccelerometerSensor.openChannel() para abrir un canal hacia el acelermetro.


Channel bufferedChannel = AccelerometerSensor.openChannel ( Application.getApplication(), channelConfig );

22

Gua de desarrollo

Recuperar las lecturas del acelermetro desde el bfer

Recuperar las lecturas del acelermetro desde el bfer


1. Importe las siguientes clases: net.rim.device.api.system.AccelerometerData; net.rim.device.api.system.AccelerometerSensor.Channel; Deber consultar al bfer los datos del acelermetro.
AccelerometerData accData = bufferedChannel.getAccelerometerData();

2. 3.

Invoque AccelerometerData.getNewBatchLength() para obtener el nmero de lecturas recuperadas desde la ltima consulta.
int newBatchSize = accData.getNewBatchLength();

4.

Invoque AccelerometerData.getXAccHistory(), AccelerometerData.getYAccHistory() y AccelerometerData.getZAccHistory() para recuperar datos del acelermetro del bfer para cada eje.
short[] xAccel = accData.getXAccHistory(); short[] yAccel = accData.getYAccHistory(); short[] zAccel = accData.getZAccHistory();

Obtener la hora a la que se efectu una lectura del acelermetro


1. 2. Importe la clase net.rim.device.api.system.AccelerometerData. Deber consultar al bfer los datos del acelermetro.
AccelerometerData accData; accData = bufferedChannel.getAccelerometerData();

3.

Invoque AccelerometerData.getSampleTsHistory().
long[] queryTimestamps = accData.getSampleTsHistory();

23

Gua de desarrollo

Eventos

Eventos
Responder a eventos de navegacin

Puede utilizar los mtodos de navegacin Screen para crear una aplicacin de dispositivo BlackBerry. Si la aplicacin existente del dispositivo BlackBerry implementa la interfaz TrackwheelListener, actualice la aplicacin del dispositivo BlackBerry para utilizar los mtodos de navegacin Screen. 1. 2. Importe la clase net.rim.device.api.ui.Screen. Gestione los eventos de navegacin ampliando la clase net.rim.device.api.ui.Screen (o una de sus subclases) y omitiendo los siguientes mtodos de navegacin:
navigationClick(int status, int time) navigationUnclick(int status, int time) navigationMovement(int dx, int dy, int status, int time)

Determinar el tipo de mtodo de entrada


1. Importe una o ms de las siguientes clases: net.rim.device.api.ui.Screen net.rim.device.api.ui.Field Importe la interfaz net.rim.device.api.system.KeypadListener. Implemente la interfaz net.rim.device.api.system.KeypadListener. Ample la clase Screen, la clase Field o las dos. En la implementacin de uno de los mtodos navigationClick, navigationUnclick o navigationMovement, realice un orden de bits Y una operacin en el parmetro status para generar ms informacin sobre el evento. Implemente el mtodo navigationClick(int status, int time) para determinar si la rueda de desplazamiento o un dispositivo de entrada de navegacin de cuatro direcciones (por ejemplo, una bola de desplazamiento) desencadena un evento.
public boolean navigationClick(int status, int time) { if ((status & KeypadListener.STATUS_TRACKWHEEL) == KeypadListener.STATUS_TRACKWHEEL) { //Input came from the trackwheel } else if ((status & KeypadListener.STATUS_FOUR_WAY) == KeypadListener.STATUS_FOUR_WAY) { //Input came from a four way navigation input device } return super.navigationClick(status, time); }

2. 3. 4. 5.

Para obtener ms informacin sobre los modificadores de estado para la clase net.rim.device.api.system.KeypadListener, consulte la referencia de API para BlackBerry Java Development Environment.

24

Gua de desarrollo

Modelos de interaccin con la pantalla tctil

Modelos de interaccin con la pantalla tctil


BlackBerry con una pantalla tctil y un panel tctil utilizan un modelo de interaccin de clics que no ejerce presin, con este modelo el usuario del dispositivo BlackBerry toca la pantalla o utiliza el panel tctil para realizar una accin. Este modelo es diferente del empleado en los modelos de BlackBerry con una pantalla tctil SurePress, en la que el usuario hace clic (o pulsa) en la pantalla para realizar una accin. En ambos tipos de dispositivos, cuando el usuario toca la pantalla, ocurre un evento TouchEvent.DOWN. En dispositivos con una pantalla tctil SurePress, cuando el usuario ejerce presin y hace clic en la pantalla, ocurre un evento TouchEvent.CLICK. Si se disminuye la presin, ocurre un evento TouchEvent.UNCLICK. Normalmente, acciones como, por ejemplo, la invocacin de una accin basada en un botn tienen lugar en el evento TouchEvent.UNCLICK. Cuando el usuario deja de ejercer presin en la pantalla, ocurre un evento TouchEvent.UP. En dispositivos con una pantalla tctil que sea compatible con este tipo de clic que no ejerce presin, no tiene lugar la accin fsica de hacer clic y deseleccionar. En su lugar, se espera que las acciones tengan lugar cuando el usuario toque la pantalla. Un toque es un evento TouchEvent.DOWN seguido rpidamente de un evento TouchEvent.UP. Esta combinacin de eventos de toques se denomina gesto, a continuacin, tiene lugar un TouchGesture. En el caso de un toque, tiene lugar un evento TouchGesture.TAP (junto con los eventos TouchEvent.DOWN y TouchEvent.UP ). Para ofrecer mayor compatibilidad entre los dos tipos de modelos de interaccin de pantalla tctil, en dispositivos que sean compatibles con los clics sin presin, el evento TouchEvent.CLICK y el evento TouchEvent.UNCLICK tendrn lugar tras el evento TouchGesture.TAP, as que puede invocar una accin en el evento TouchEvent.UNCLICK en todos los dispositivos de pantalla tctil, tanto si el dispositivo tiene una pantalla tctil SurePress como si no. Dispositivos que son compatibles con los clics sin presin
TouchEvent.DOWN TouchGesture.HOVER

Accin del usuario Tocar la pantalla. Tocar y mantener el dedo presionando un elemento. Hacer clic en la pantalla. Hacer clic y mantener pulsada la pantalla. Soltar la pantalla. Despegar el dedo de la pantalla. Tocar la pantalla.

Dispositivos con pantalla tctil SurePress


TouchEvent.DOWN TouchGesture.HOVER


TouchEvent.UP TouchEvent.DOWN TouchGesture.TAP TouchEvent.CLICK TouchEvent.UNCLICK

TouchEvent.CLICK TouchEvent.CLICK_REPEAT TouchEvent.UNCLICK TouchEvent.UP TouchEvent.DOWN TouchGesture.TAP TouchEvent.UP

25

Gua de desarrollo

Responder a los eventos de pantalla tctil

Accin del usuario

Dispositivos que son compatibles con los clics sin presin


TouchEvent.UP

Dispositivos con pantalla tctil SurePress

Puede determinar si un dispositivo con una pantalla tctil es compatible con los clics que no ejercen presin invocando DeviceCapability.isTouchClickSupported(). Si el dispositivo es compatible con los clics que no ejercen presin, el mtodo devuelve false. Si el dispositivo dispone de una pantalla tctil SurePress, el mtodo devuelve true.

Responder a los eventos de pantalla tctil


Los usuarios del dispositivo BlackBerry pueden llevar a cabo en un dispositivo con pantalla tctil las mismas acciones que en un dispositivo BlackBerry con bola de desplazamiento. Por ejemplo, los usuarios del dispositivo BlackBerry pueden utilizar la pantalla tctil para abrir un men, desplazarse por una lista de opciones y seleccionar una opcin. Si utiliza una versin de BlackBerry Java Development Environment anterior a la versin 4.7 para crear una aplicacin del dispositivo BlackBerry, puede modificar el archivo .jad de la aplicacin para activar la aplicacin para que responda cuando un usuario del dispositivo BlackBerry toque la pantalla tctil. En el archivo .jad, debe configurar la opcin RIM-TouchCompatibilityMode en false. Si utiliza BlackBerry JDE versin 4.7 o posterior para crear una aplicacin del dispositivoBlackBerry, puede activar la aplicacin para que identifique la accin que lleva a cabo el usuario del dispositivoBlackBerry n la pantalla tctil ampliando la clase net.rim.device.api.ui.Screen y la clase net.rim.device.api.ui.Field o una de las subclases de la clase Field y omitiendo el mtodo touchEvent(). En el mtodo touchEvent(), compare el valor que TouchEvent.getEvent() devuelve a las constantes desde la clase net.rim.device.api.ui.TouchEvent y la clase net.rim.device.api.ui.TouchGesture. La clase TouchEvent contiene las constantes que representan las distintas acciones que un usuario puede realizar en la pantalla tctil. Por ejemplo, las acciones para hacer clic, tocar y mover se corresponden con las constantes TouchEvent.CLICK, TouchEvent.DOWN y TouchEvent.MOVE. La clase TouchGesture contiene las constantes que representan los distintos gestos que un usuario puede realizar en la pantalla tctil. Por ejemplo, los gestos para puntear y tocar la pantalla se corresponden con las constantes TouchGesture.TAP y TouchGesture.SWIPE. Cdigo de ejemplo: identificacin de la accin que realiza un usuario en la pantalla tctil El siguiente cdigo de ejemplo utiliza una declaracin switch para identificar la accin.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.CLICK: Dialog.alert("A click action occurred"); return true; case TouchEvent.DOWN: Dialog.alert("A down action occurred"); return true; case TouchEvent.MOVE: 26

Gua de desarrollo

Responder a los eventos de pantalla tctil

} return false; }

Dialog.alert("A move action occurred"); return true;

Responder a eventos de sistema mientras el usuario toca la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3. 4.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

Compruebe si el valor que devuelve TouchEvent.getEvent() es igual a TouchEvent.CANCEL.


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.CANCEL: Dialog.alert("System event occurred while processing touch events"); return true; } return false; }

Responder a un usuario deslizando rpidamente un dedo hacia arriba en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

27

Gua de desarrollo

Responder a los eventos de pantalla tctil

4.

TouchGesture.SWIPE_NORTH.

Compruebe si el valor que devuelve TouchGesture.getSwipeDirection() es igual a


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.SWIPE: if(gesture.getSwipeDirection() == TouchGesture.SWIPE_NORTH) { Dialog.alert("Upward swipe occurred"); return true; } } return false; } }

Responder a un usuario deslizando rpidamente un dedo hacia abajo en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3. 4.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

TouchGesture.SWIPE_SOUTH.

Compruebe si el valor que devuelve TouchGesture.getSwipeDirection() es igual a


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.SWIPE: if(gesture.getSwipeDirection() == TouchGesture.SWIPE_SOUTH) { Dialog.alert("Downward swipe occurred"); return true; } }

28

Gua de desarrollo

Responder a los eventos de pantalla tctil

return false;

Responder a un usuario deslizando un dedo hacia la izquierda rpidamente en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3. 4.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

TouchGesture.SWIPE_EAST.

Compruebe si el valor que devuelve TouchGesture.getSwipeDirection() es igual a


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.SWIPE: if(gesture.getSwipeDirection() == TouchGesture.SWIPE_EAST) { Dialog.alert("Eastward swipe occurred"); return true; } } return false; } }

Responder a un usuario deslizando un dedo hacia la derecha rpidamente en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager

29

Gua de desarrollo

Responder a los eventos de pantalla tctil

net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog 2. 3. 4. Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField { ().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

TouchGesture.SWIPE_WEST.

Compruebe si el valor que devuelve TouchGesture.getSwipeDirection() es igual a


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.SWIPE: if(gesture.getSwipeDirection() == TouchGesture.SWIPE_WEST) { Dialog.alert("Westward swipe occurred"); return true; } } return false; } }

Responder a un usuario haciendo clic en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3. 4.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

Compruebe si el valor que devuelve TouchEvent.getEvent() es igual a TouchEvent.CLICK.


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.CLICK: Dialog.alert("CLICK occurred"); return true;

30

Gua de desarrollo

Responder a los eventos de pantalla tctil

} return false;

Responder a un usuario tocando la pantalla dos veces rpidamente


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3.

En su implementacin del mtodotouchEvent(TouchEvent message) compruebe que existe el evento TouchGesture.TAP y que TouchGesture.getTapCount devuelve 2.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.TAP: if(gesture.getTapCount() == 2) { Dialog.alert("Double tap occurred"); return true; } } } return false; }

Responder a un usuario tocando y arrastrando un elemento en la pantalla


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2.

31

Gua de desarrollo

Responder a los eventos de pantalla tctil

3. 4.

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent (). Compruebe si el valor que devuelve TouchEvent.getEvent() es igual a TouchEvent.MOVE.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.MOVE: Dialog.alert("Move event occurred"); return true; } return false; }

Responder a un usuario tocando la pantalla ligeramente


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3. 4.

().

En su implementacin del mtodo touchEvent(TouchEvent message), invoque TouchEvent.getEvent

Compruebe si el valor que devuelve TouchEvent.getEvent() es igual a TouchEvent.DOWN.


protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.DOWN: Dialog.alert("Touch occurred"); return true; } return false; }

Responder a una accin de desplazamiento


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.TouchGesture net.rim.device.api.ui.Field net.rim.device.api.ui.Manager

32

Gua de desarrollo

net.rim.device.api.ui.Screen 2. 3. Cree una clase que ample la clase Manager.


public class newManager extends Manager {

En su implementacin del mtodo touchEvent(TouchEvent message) , compruebe si el valor que devuelve TouchEvent.getEvent() es igual que TouchEvent.MOVE.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.MOVE: return true; } return false; }

Responder a un usuario tocando la pantalla en dos ubicaciones al mismo tiempo


1. Importe las siguientes clases: net.rim.device.api.ui.TouchEvent net.rim.device.api.ui.Field net.rim.device.api.ui.Manager net.rim.device.api.ui.Screen net.rim.device.api.ui.component.Dialog Cree una clase que ample la clase Manager, la clase Screen, la clase Field, o una de las subclases Field.
public class newButtonField extends ButtonField {

2. 3.

En su implementacin del mtodo touchEvent(TouchEvent message) , compruebe si las siguientes invocaciones del mtodo devuelven valores mayores a cero: TouchEvent.getX(1), TouchEvent.getY (1), TouchEvent.getX(2), TouchEvent.getY(2).
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.MOVE: if(message.getX(1) > 0 && message.getY(1) > 0) { Dialog.alert("First finger touched/moved"); } if(message.getX(2) > 0 && message.getY(2) > 0) { Dialog.alert("Second finger touched/moved"); } return true; } return false; }

33

Gua de desarrollo

Gestos de pellizco

Gestos de pellizco
Los dispositivos BlackBerry con pantalla tctil son compatibles con los gestos de pellizco. Los gestos de pellizco normalmente amplan y alejan un objeto en la pantalla. Un pellizco comienza cuando se detectan dos puntos de contacto en la pantalla tctil. El punto focal del pellizco se define como el punto intermedio entre dos puntos de contacto iniciales. Al detectar dos puntos de contacto, tiene lugar un evento TouchGesture.PINCH_BEGIN. Los puntos de la coordenada del punto focal del gesto de pellizco se almacenan como TouchEvent.getX(1) y TouchEvent.getY(1). Puede acceder al valor inicial del zoom invocando TouchGesture.getPinchMagnitude(). Cuando el usuario mueve uno o ambos puntos de contacto, tiene lugar una serie de eventos TouchGesture.PINCH_UPDATE. Puede acceder a los valores de zoom durante el gesto de pellizco invocando TouchGesture.getPinchMagnitude(). Cuando el usuario completa el gesto, tiene lugar un evento TouchGesture.PINCH_END. Puede acceder al valor final del zoom invocando TouchGesture.getPinchMagnitude().

Ejemplo de cdigo: recuperar informacin acerca de un gesto de pellizco Este ejemplo demuestra cmo administrar un gesto de pellizco en el mtodo touchEvent() de la pantalla.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.PINCH_END: Dialog.alert("Focal point: " + message.getX(1) + ", " + message.getY(1) + "\nFinal zoom value: " + gesture.getPinchMagnitude()); return true; } } return false; }

Activar los gestos para pellizcar


De forma predeterminada, los gestos para pellizcar no estn activados en la pantalla en una aplicacin del dispositivo BlackBerry. Debe establecer la propiedad de pantalla para activar la generacin de los gestos para pellizcar en una pantalla. 1. Importe las clases y las interfaces necesarias.

34

Gua de desarrollo

Desplazamientos con paneles tctiles

import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.input.*;

2. 3. 4.

En su objeto Screen, cree un objeto InputSettings para rellenar con propiedades de pantalla tctil.
InputSettings ts = TouchscreenSettings.createEmptySet();

Configure la propiedad TouchscreenSettings.DETECT_PINCH en 1.


ts.set(TouchscreenSettings.DETECT_PINCH, 1);

Invoque Screen.addInputSettings() para agregar la configuracin de entrada a la pantalla.


addInputSettings(ts);

Puede cambiar el valor de la propiedad TouchscreenSettings.DETECT_PINCH en cualquier momento, no slo cuando cree el objeto Screen. Cdigo de ejemplo Este ejemplo demuestra cmo activar los gestos para pellizcar por el panel tctil en el constructor de una pantalla.
public MyScreen() { setTitle("Sample Screen"); InputSettings ts = TouchscreenSettings.createEmptySet(); ts.set(TouchscreenSettings.DETECT_PINCH, 1); addInputSettings(ts); ... }

Desplazamientos con paneles tctiles


Al igual que los dispositivos BlackBerry con una pantalla tctil, los dispositivos con un panel tctil son compatibles con los desplazamientos que los usuarios del dispositivo BlackBerry realizan en el panel tctil. Se generar un objeto TouchEvent con el tipo de evento TouchGesture.NAVIGATION_SWIPE cuando el usuario se desplace a travs del panel tctil. Puede recuperar informacin acerca del desplazamiento por el panel tctil mediante los siguientes mtodos:
TouchGesture.getSwipeAngle() TouchGesture.getSwipeDirection() TouchGesture.getSwipeContentAngle() TouchGesture.getSwipeContentDirection() TouchGesture.getSwipeMagnitude()

Ejemplo de cdigo: recuperar informacin acerca de un desplazamiento por el panel tctil

35

Gua de desarrollo

Desplazamientos con paneles tctiles

Este ejemplo demuestra cmo administrar un desplazamiento por el panel tctil en el mtodo touchEvent() de la pantalla.
protected boolean touchEvent(TouchEvent message) { switch(message.getEvent()) { case TouchEvent.GESTURE: TouchGesture gesture = message.getGesture(); switch(gesture.getEvent()) { case TouchGesture.NAVIGATION_SWIPE: Dialog.alert("Swipe direction: " + gesture.getSwipeDirection() + ", " + "\nMagnitude: " + gesture.getSwipeMagnitude()); return true; } } return false; }

Activar los deslizamientos que los usuarios realizan en el panel tctil


De forma predeterminada, los deslizamientos que los usuarios del dispositivo BlackBerry realizan en el panel tctil no estn activados en una pantalla. Debe configurar la propiedad de navegacin para activar la generacin de deslizamientos por el panel tctil en una pantalla. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.input.*;

2. 3. 4.

En su objeto Screen, cree un objeto InputSettings para rellenar con propiedades de navegacin.
InputSettings nd = NavigationDeviceSettings.createEmptySet();

Configure la propiedad NavigationDeviceSettings.DETECT_SWIPE en 1.


nd.set(NavigationDeviceSettings.DETECT_SWIPE, 1);

Invoque Screen.addInputSettings() para agregar la configuracin de entrada a la pantalla.


addInputSettings(nd);

Puede cambiar el valor de la propiedad NavigationDeviceSettings.DETECT_SWIPE en cualquier momento, no slo cuando cree el objeto Screen. Cdigo de ejemplo Este ejemplo muestra cmo activar los deslizamientos por el panel tctil en el constructor de una pantalla.

36

Gua de desarrollo

Inyeccin de eventos

public MyScreen() { setTitle("Sample Screen"); InputSettings nd = NavigationDeviceSettings.createEmptySet(); nd.set(NavigationDeviceSettings.DETECT_SWIPE, 1); addInputSettings(nd); ... }

Inyeccin de eventos
Puede generar eventos de interfaz de usuario mediante programacin utilizando la clase EventInjector y sus clases internas. En dispositivos BlackBerry que ejecutan BlackBerry Device Software versin 5.0 o posterior y que tienen pantallas tctiles, podr inyectar eventos tctiles, por ejemplo, deslizamientos o toques. Puede utilizar una de las clases internas EventInjector para modelar un evento y puede utilizar el mtodo invokeEvent() para inyectar el evento. El evento se enva a la aplicacin que est seleccionada actualmente y preparada para aceptar la entrada. Puede utilizar la inyeccin de eventos para automatizar las pruebas. Tambin puede utilizar la inyeccin de eventos para permitir a los perifricos interactuar con el dispositivo BlackBerry. Tambin la puede utilizar en aplicaciones accesibles como en convertidores de voz a texto. Si desea consultar una aplicacin de ejemplo que muestre la inyeccin de eventos, visite www.blackberry.com/go/toucheventinjectorsampleapp para descargar la aplicacin de ejemplo Inyector de eventos tctiles. Para obtener ms informacin acerca de la aplicacin de ejemplo, visite www.blackberry.com/go/docs/developers para leer la Descripcin general de la aplicacin de ejemplo Inyector de eventos tctiles.

37

Gua de desarrollo

API de marco de comandos

API de marco de comandos


La API de marco de comandos contiene controladores de comandos, metadatos de comando y comandos. Componente Controlador de comandos

Puede utilizar la API de marco de comandos en el paquete net.rim.device.api.command para definir las funcionalidades que puede utilizar en distintas ubicaciones de su aplicacin o en otras aplicaciones del dispositivo BlackBerry.

Metadatos de comando

Descripcin Utilice la clase CommandHandler para definir la funcionalidad que desea proporcionar en su aplicacin o en otras aplicaciones del dispositivo. Puede utilizar una clase que ample la clase CommandHandler abstracta y definir la funcionalidad en el mtodo execute() de su clase. Esta funcionalidad recibe el nombre de comando. Utilice la clase CommandMetadata para definir metadatos que describan un comando. Los metadatos de cada comando son encapsulados en un objeto CommandMetadata. La nica parte de metadatos necesaria para un comando es el identificador del comando, que se suministra cuando se construye el objeto CommandMetadata y se almacena en el campo del objeto COMMAND_ID.
CommandMetadata le ofrece otros campos que podr utilizar para describir el comando, como por ejemplo RESOURCE_BUNDLE_NAME, al que puede asignar el

Comando

nombre del paquete de recursos utilizado por el comando. Tambin puede definir elementos de metadatos especficos de un comando en concreto. Utilice la clase Command para ejecutar un comando. Puede pensar en una instancia Command como un proxy a una instancia de una clase que ample CommandHandler. Al invocar Command.execute(), la llamada se delega a la instancia CommandHandler asociada, pasando el contexto actual y pasando de manera transparente una versin de slo lectura de los metadatos de comando asociado para su ejecucin.

La API de marco de comandos ofrece dos registros que podr utilizar para almacenar sus comandos: Puede utilizar el registro local para almacenar los comandos y usarlos en su aplicacin mediante la clase LocalCommandRegistrarConnection. Puede utilizar el registro global para almacenar los comandos para su uso en otras aplicaciones del dispositivo mediante la clase RemoteCommandRegistrarConnection.

Las aplicaciones de ejemplo Demostracin de marco de comandos y la aplicacin remota de demostracin de marco de comandos estn incluidas en BlackBerry Java SDK. Estas aplicaciones de ejemplo muestran cmo definir y utilizar los comandos en una sola aplicacin y cmo definir los comandos en una aplicacin y utilizarlos en otras aplicaciones.

38

Gua de desarrollo

Utilizar un comando con un componente de la interfaz de usuario

Utilizar un comando con un componente de la interfaz de usuario


Puede definir un comando para su uso con un componente de la interfaz de usuario en una aplicacin del dispositivo BlackBerry. Con este enfoque, no necesitar definir los metadatos del comando. Los principales componentes de la interfaz de usuario para el dispositivo BlackBerry que son compatibles con los comandos incluyen elementos de men, botones, elementos de men emergente y barras de herramientas. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.command.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*;

2.

Cree un controlador de comandos mediante la generacin de una clase que ample la clase abstracta CommandHandler . En execute(), defina la funcionalidad que desea asociar al componente de la interfaz de usuario. Para especificar si un comando es ejecutable para un objeto de contexto determinado, puede implementar el mtodo canExecute() en su controlador de comandos. Si no implementa canExecute(), su comando es siempre ejecutable.
// this command is always executable class DialogCommandHandler extends CommandHandler { public void execute(ReadOnlyCommandMetadata metadata, Object context) { Dialog.alert("Executing command for " + context.toString()); } }

3.

Cree el componente de la interfaz de usuario.


MenuItem myItem = new MenuItem(new StringProvider("My Menu Item"), 0x230000, 0);

4.

Para un elemento de men o botn, puede configurar opcionalmente el contexto para el comando a travs del mtodo setCommandContext() de los componentes de la interfaz de usuario. Para algunos comandos, podra ser necesario un contexto para determinar qu debera hacer el comando. Si no configura un contexto, el objeto del elemento de men o el objeto de botn se encontrarn en el contexto.
myItem.setCommandContext(new Object() { public String toString() { return "My MenuItem Object"; } });

5.

Invoque setCommand() para especificar el comando del componente de la interfaz de usuario y proporcione el controlador de comandos como argumento del mtodo.
myItem.setCommand(new Command(new DialogCommandHandler()));

39

Gua de desarrollo

Utilizar un comando en una o ms aplicaciones

6.

Agregue el componente a su pantalla.


addMenuItem(myItem);

El comando se ejecuta cuando un usuario del dispositivo BlackBerry lleva a cabo una accin en el componente de la interfaz de usuario (por ejemplo, cuando el usuario hace clic en un elemento del men). Ejemplos de cdigo Si desea conocer ejemplos de este enfoque con el fin de definir y utilizar los comandos, consulte la referencia de API para MenuItem y ButtonField.

Utilizar un comando en una o ms aplicaciones


Puede almacenar un comando en un registro local para su uso en una aplicacin o almacenar un comando en un registro global para su uso en cualquier aplicacin del dispositivo BlackBerry. 1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.command.*; net.rim.device.api.command.registrar.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*;

2.

Cree un controlador de comandos mediante la generacin de una clase que ample la clase abstracta CommandHandler . En execute(), defina la funcionalidad que desea que est disponible. Para especificar si un comando es ejecutable para un objeto de contexto determinado, puede implementar opcionalmente canExecute() en su controlador de comandos. Si no implementa canExecute(), su comando es siempre ejecutable.
private static class ViewContactCommand extends CommandHandler { public void execute(ReadOnlyCommandMetadata metadata, Object context) { // Invoke the Contacts application to view a contact here } public boolean canExecute(ReadOnlyCommandMetadata metadata, Object context) { // Return true if the command can be executed // with the passed-in context object. } }

3.

Defina los metadatos del comando.


String id = "com.example.contacts.view.emailaddr"; CommandMetadata metadata = new CommandMeta(id);

4.

Si las aplicaciones que utilizan el comando deben crear instancias del comando, almacena el nombre de la clase del comando en los metadatos.
metadata.setClassname(ViewContactCommand.class.getName());

40

Gua de desarrollo

Utilizar un comando en una o ms aplicaciones

5.

Nota: Las aplicaciones pueden crear instancias de comandos de terceros de forma dinmica slo si los comandos se almacenan en el registro local. Opcionalmente, puede definir las categoras del comando y las categoras de contexto para el comando. Las aplicaciones que utilizan el comando utilizan las categoras para buscar comandos en un registro y para determinar si un comando es ejecutable. Tipo de categora Comando Descripcin Especifica el tipo de categorizacin que desea para su comando. Las aplicaciones que utilizan comandos pueden consultar un registro para comandos en categoras especificadas. Especifica los contextos que son apropiados para que el comando se ejecute en los mismos. Puede utilizar esta categora para indicar a las aplicaciones que utilizan el comando, qu clases de objetos de contexto pueden pasarse a CommandHandler.Execute().

Contexto

String[] myCommandCategories = {"app.contacts", "action.view"}; metadata.setCommandCategories(new CategoryCollection(myCommandCategories)); String[] myContextCategories = {emailaddr}; metadata.setContextCategories(new CategoryCollection(myContextCategories));

6.

Registre el comando. a. Si desea que su comando est disponible slo en su aplicacin, utilice un objeto LocalCommandRegistrarConnection. El registro local est disponible slo en el proceso actual.
LocalCommandRegistrarConnection connection = new LocalCommandRegistrarConnection(); connection.registerCommand(new ViewContactCommand(), metadata);

b.

Nota: Para que las aplicaciones creen instancias del comando de forma dinmica, debe registrar el comando slo con los metadatos invocando registerCommand(CommandMetadata)). De lo contrario, se utiliza el CommandHandler registrado. Si desea que su comando est disponible en cualquier aplicacin, utilice un objeto RemoteCommandRegistrarConnection. El registro global est disponible para todos los procesos que se ejecutan en el dispositivo.
RemoteCommandRegistrarConnection connection = new RemoteCommandRegistrarConnection(); connection.registerCommand(new ViewContactCommand(), metadata);

7.

Desde otra ubicacin en la aplicacin (para comandos locales) o desde cualquier aplicacin en el dispositivo (para comandos globales), recupere y utilice el comando. a. Cree un objeto CommandRequest y rellnelo con la informacin acerca del comando que desea recuperar del registro.
CommandRequest request = new CommandRequest(); String[] myCommandCategories = {"app.contacts", "action.view"}; request.setCommandCategories(new CategoryCollection(myCommandCategories)); ...

41

Gua de desarrollo

Utilizar un comando en una o ms aplicaciones

b.

Recupere el comando del registro.


// using the local registry LocalCommandRegistrarConnection connection = new LocalCommandRegistrarConnection(); Command command = connection.getCommand(request); // using the global registry RemoteCommandRegistrarConnection connection = new RemoteCommandRegistrarConnection(); Command command = connection.getCommand(request);

c.

Utilice el comando. El ejemplo siguiente ejecuta el comando, dependiendo del contexto.


command.execute(context); // context is the context object

Ejemplos de cdigo Hay dos aplicaciones de ejemplo que utilizan la API de marco de comandos incluidas en BlackBerry Java SDK: La aplicacin remota de demostracin del marco de comandos demuestra cmo crear un comando y almacenarlo en el registro global para su uso en otras aplicaciones. La demostracin del marco de comandos muestra cmo crear comandos, almacenarlos en el registro local y los agregarlos como elementos de men en los mens emergentes para los campos, dependiendo del contenido de los campos. Esta aplicacin de ejemplo tambin ejecuta un comando que se almacena en el registro global a travs de la aplicacin remota de demostracin del marco de comandos.

42

Gua de desarrollo

Disponer los componentes de la interfaz de usuario

Disponer los componentes de la interfaz de usuario

Puede disponer los componentes de la interfaz de usuario en una pantalla de la aplicacin utilizando gestores de diseo de la API de BlackBerry. Las siguientes clases amplan la clase Manager, proporcionada en el paquete net.rim.device.apu.ui, sta ofrece diseos predefinidos para los componentes de la interfaz de usuario en la pantalla de la aplicacin. Gestor de diseo
FlowFieldManager

HorizontalFieldManager

Descripcin Este gestor de diseo ordena los componentes de la interfaz de usuario verticalmente y, a continuacin, horizontalmente dependiendo del tamao de la pantalla. El primer componente de la interfaz de usuario se coloca en la esquina superior izquierda de la pantalla y los siguientes componentes se colocan horizontalmente a la derecha del primer componente hasta alcanzar la anchura de la pantalla. Una vez que los componentes de la interfaz de usuario no caben en la primera fila, el siguiente componente de la interfaz de usuario se coloca debajo de la primera fila de componentes en una fila que tiene una altura que es igual a la del componente ms alto de la fila que hay sobre el mismo. Puede aplicar bits de estilo vertical (por ejemplo, Field.FIELD_TOP, Field.FIELD_BOTTOM, o Field.FIELD_VCENTER) para alinear los componentes de la interfaz de usuario verticalmente dentro de su fila. Este gestor de diseo ordena los componentes de la interfaz de usuario en una nica fila horizontal que comienza en el lado izquierdo de la pantalla y termina en el lado derecho de la pantalla. Puesto que este gestor de diseo alinea los componentes de la interfaz de usuario horizontalmente, no es posible aplicar bits de estilo horizontal (por ejemplo, Field.FIELD_LEFT, Field.FIELD_HCENTER, o Field.FIELD_RIGHT). Puede aplicar bits de estilo vertical (por ejemplo, Field.FIELD_TOP, Field.FIELD_BOTTOM, o Field.FIELD_VCENTER). Si los componentes de la interfaz de usuario no se ajustan a la anchura disponible de la pantalla, debe utilizar el bit de estilo Manager.HORIZONTAL_SCROLL para activar el desplazamiento horizontal. De lo contrario, la pantalla muestra tantos componentes de la interfaz de usuario como le sea posible dentro de la anchura disponible de la pantalla y el resto no se muestra. Los componentes de la interfaz de usuario existen pero no son visibles. Esta situacin puede generar comportamientos de desplazamiento inesperados para sus usuarios. Este gestor de diseo ordena los componentes de la interfaz de usuario en una nica columna vertical que comienza en la parte superior de la pantalla y termina en la parte inferior de la misma. Puesto que este gestor de diseo
43

VerticalFieldManager

Gua de desarrollo

Distribuir los componentes de la interfaz de usuario

Gestor de diseo

Descripcin se ha diseado para ordenar los elementos de forma vertical, no es posible aplicar bits de estilo vertical a los componentes de la interfaz de usuario (por ejemplo, Field.FIELD_TOP, Field.FIELD_BOTTOM o Field.FIELD_VCENTER). Puede aplicar bits de estilo horizontal (por ejemplo, Field.FIELD_LEFT, Field.FIELD_HCENTER, o Field.FIELD_RIGHT).

Puede utilizar gestores de diseo adicionales para ordenar los componentes de la interfaz de usuario en su aplicacin. Por ejemplo, puede utilizar el gestor de diseo GridFieldManager para colocar los componentes de la interfaz de usuario en filas y columnas en una pantalla para crear una cuadrcula. Puede utilizar el gestor de diseo EyelidFieldManager para mostrar componentes de la interfaz de usuario en el par de gestores que aparecen en la parte superior e inferior de la pantalla temporalmente.

Distribuir los componentes de la interfaz de usuario


1. Importe las clases y las interfaces necesarias.
net.rim.device.api.ui.container.HorizontalFieldManager; net.rim.device.api.ui.component.ButtonField;

2. 3. 4. 5.

Cree una instancia de HorizontalFieldManager.


HorizontalFieldManager _fieldManagerBottom = new HorizontalFieldManager();

Invoque add() para agregar HorizontalFieldManager a la pantalla.


myScreen.add(_fieldManagerBottom);

Cree una instancia de ButtonField.


ButtonField mySubmitButton = new ButtonField("Submit");

Agregue ButtonField a HorizontalFieldManager.


_fieldManagerBottom.add(mySubmitButton);

Crear un diseo de cuadrcula


Nota: Para obtener informacin acerca de cmo crear un diseo de cuadrcula enBlackBerry Java Development Environment anteriores a la versin 5.0, visite http://www.blackberry.com/knowledgecenterpublic para leer DB-00783. Puede colocar los campos en filas y columnas en una pantalla para crear una cuadrcula mediante la clase GridFieldManager. Al crear una cuadrcula, puede especificar el nmero de filas y columnas. Despus de crear una cuadrcula, no es posible cambiar el nmero de filas y columnas que contiene.

44

Gua de desarrollo

Crear un diseo de cuadrcula

Las cuadrculas cuentan con un ndice cero, por lo que la primera celda se encuentra en la fila 0, en la columna 0. En una configuracin regional con una direccin de texto de izquierda a derecha, la primera celda se encuentra en la esquina superior izquierda de la cuadrcula.

En una configuracin regional con una direccin de texto de derecha a izquierda, la primera celda se encuentra en la esquina superior derecha de la cuadrcula.

Puede agregar campos a una cuadrcula de forma secuencial (de izquierda a derecha, de arriba a abajo en configuraciones regionales con una izquierda direccin de texto de izquierda a derecha; de derecha a izquierda, de arriba a abajo en las configuraciones regionales con una direccin de texto de derecha a izquierda) o bien especificando una fila y una columna en la cuadrcula. Puede eliminar campos, insertar campos, especificar el espaciado entre columnas y filas y recuperar las propiedades de la cuadrcula. Las cuadrculas no contienen filas de encabezado definidas ni columnas de encabezado. Puede emular la apariencia de los encabezados cambiando la apariencia de los campos en la primera fila o columna de la cuadrcula. Las cuadrculas pueden desplazarse horizontal o verticalmente si la anchura o la altura de la cuadrcula exceden el rea visible de la pantalla. Puede especificar el ancho de la columna invocando GridFieldManager.setColumnProperty() y puede especificar la altura de la fila invocando GridFieldManager.setRowProperty(). Al invocar estos mtodos, debe especificar una propiedad de GridFieldManager. Propiedad
FIXED_SIZE PREFERRED_SIZE

Descripcin la anchura o la altura son de un tamao fijo en pxeles la anchura o la altura son del tamao preferido basado en el tamao mximo preferido de los campos en la columna o la fila (PREFERRED_SIZE es la propiedad predeterminada)

45

Gua de desarrollo

Crear un diseo de cuadrcula

Propiedad
PREFERRED_SIZE_WITH_MAXIMUM AUTO_SIZE

Descripcin la anchura o la altura son de un tamao preferido hasta un tamao mximo la anchura y la altura se basan en el espacio disponible en pantalla

Crear un diseo de cuadrcula


1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. En el ejemplo, la clase GridScreen, descrita en el paso 3, representa la pantalla personalizada.
class GridFieldManagerDemo extends UiApplication { public static void main(String[] args) { GridFieldManagerDemo theApp = new GridFieldManagerDemo(); theApp.enterEventDispatcher(); } GridFieldManagerDemo() { pushScreen(new GridScreen()); } }

3.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen.


class GridScreen extends MainScreen { public GridScreen() { } }

4.

En el constructor de pantalla, invoque setTitle() para establecer el texto que desea que aparezca en la seccin del ttulo de la pantalla.
setTitle("GridFieldManager Demo");

5.

En el constructor de pantalla, cree una instancia de la clase GridFieldManager. Especifique el nmero de filas y columnas, y el estilo de la cuadrcula (utilizando un estilo heredado de net.rim.device.api.ui.Manager). Especifique 0 para utilizar el estilo predeterminado.
GridFieldManager grid; grid = new GridFieldManager(2,3,0);

6.
46

En el constructor de pantalla, invoque GridFieldManager.add() para agregar campos a la cuadrcula.

Gua de desarrollo

Crear un diseo de cuadrcula

grid.add(new grid.add(new grid.add(new grid.add(new grid.add(new

LabelField("one")); LabelField("two")); LabelField("three")); LabelField("four")); LabelField("five"));

7.

En el constructor de pantalla, invoque los mtodos de GridFieldManager set() para especificar las propiedades de la cuadrcula.
grid.setColumnPadding(20); grid.setRowPadding(20);

8.

En el constructor de pantalla, invoque Screen.add() para agregar la cuadrcula a la pantalla.


add(grid);

Despus de terminar: Puede cambiar la cuadrcula despus de haberla creado. Por ejemplo, puede agregar campos, borrar campos o cambiar las propiedades de la cuadrcula.

Ejemplo de cdigo: crear un diseo de cuadrcula


/* * GridFieldManagerDemo.java * * Research In Motion Limited proprietary and confidential * Copyright Research In Motion Limited, 2009 */ import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class GridFieldManagerDemo extends UiApplication { public static void main(String[] args) { GridFieldManagerDemo theApp = new GridFieldManagerDemo(); theApp.enterEventDispatcher(); } GridFieldManagerDemo() { pushScreen(new GridScreen()); } } class GridScreen extends MainScreen { public GridScreen() { setTitle("GridFieldManager Demo"); GridFieldManager grid = new GridFieldManager(2,3,0); grid.add(new LabelField("one")); grid.add(new LabelField("two")); grid.add(new LabelField("three")); grid.add(new LabelField("four")); grid.add(new LabelField("five"));

47

Gua de desarrollo

Mostrar campos en un par temporal de gestores

grid.setColumnPadding(20); grid.setRowPadding(20); add(grid); // The grid looks like this: // | one | two | three // | four | five | // insert a cell first row, second column grid.insert(new LabelField("insert"), 0, 1); // The grid now looks like this: // | one | insert | two // | three | four | five // delete a cell second row, second column grid.delete(1,1); // The grid now looks like this: // | one | insert | two // | three | | five // Add field to first unoccupied cell grid.add(new LabelField("new")); // The grid now looks like this: // | one | insert | two // | three | new | five

Mostrar campos en un par temporal de gestores


Puede utilizar la clase EyelidFieldManager para mostrar campos en el par de gestores que aparecen en la parte superior e inferior de la pantalla temporalmente. De forma predeterminada, los campos aparecen cuando el usuario del dispositivo BlackBerry mueve la bola de desplazamiento o, para un dispositivo con una pantalla tctil, cuando tiene lugar un evento tctil. Los campos desaparecen despus de un perodo de inactividad (1,2 segundos de forma predeterminada). Puede omitir estas propiedades predeterminadas. No hay lmite al nmero y el tamao de los campos. En el caso de que los gestores contengan ms campos de los que pueden aparecer en la pantalla, los gestores superiores e inferiores se superponen con el gestor principal en primer trmino.

Mostrar los valores ButtonField y LabelField temporalmente en la parte superior e inferior de la pantalla
1. Importe las clases y las interfaces necesarias.
import import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.extension.container.*;

48

Gua de desarrollo

Mostrar campos en un par temporal de gestores

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase EyelidFieldManagerDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class EyelidFieldManagerDemo extends UiApplication { public static void main(String[] args) { EyelidFieldManagerDemo app = new EyelidFieldManagerDemo(); app.enterEventDispatcher(); } public EyelidFieldManagerDemo() { pushScreen(new EyelidFieldManagerDemoScreen()); } }

3.

Cree el marco para la pantalla personalizada ampliando la clase MainScreen.


class EyelidFieldManagerDemoScreen extends MainScreen { { public EyelidFieldManagerDemoScreen() { } }

4.

En el constructor de pantalla, invoque setTitle() para establecer el texto que aparece en la seccin del ttulo de la pantalla.
setTitle("EyelidFieldManager Demo");

5. 6.

En el constructor de pantalla, cree una instancia de la clase EyelidFieldManager.


EyelidFieldManager manager = new EyelidFieldManager();

En el constructor de pantalla, invoque EyelidFieldManager.addTop() para agregar un objeto LabelField al gestor principal de EyelidFieldManager.
manager.addTop(new LabelField("Hello World"));

7.

En el constructor de pantalla, cree un objeto de HorizontalFieldManager. Invoque HorizontalFieldManager.add() para agregar botones al HorizontalFieldManager. Invoque EyelidFieldManager.addBottom() para agregar HorizontalFieldManager al gestor secundario de EyelidFieldManager.
HorizontalFieldManager buttonPanel = new HorizontalFieldManager (Field.FIELD_HCENTER | Field.USE_ALL_WIDTH); buttonPanel.add(new SimpleButton("Button 1")); buttonPanel.add(new SimpleButton("Button 2")); manager.addBottom(buttonPanel);

8.

En el constructor de pantalla, invoque EyelidFieldManager.setEyelidDisplayTime() para especificar, en milisegundos, el perodo de la inactividad que debe transcurrir antes que el par de directores desaparezca.

49

Gua de desarrollo

Mostrar un campo en una posicin absoluta en la pantalla

manager.setEyelidDisplayTime(3000);

9.

En el constructor de pantalla, invoque add() para agregar EyelidFieldManager a la pantalla.


add(manager);

Ejemplo de cdigo: mostrar los valores ButtonField y LabelField temporalmente en la parte superior e inferior de la pantalla
import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.extension.container.*; public class EyelidFieldManagerDemo extends UiApplication { public static void main(String[] args) { EyelidFieldManagerDemo app = new EyelidFieldManagerDemo(); app.enterEventDispatcher(); } public EyelidFieldManagerDemo() { pushScreen(new EyelidFieldManagerDemoScreen()); } } class EyelidFieldManagerDemoScreen extends MainScreen { public EyelidFieldManagerDemoScreen() { setTitle("EyelidFieldManager Demo"); EyelidFieldManager manager = new EyelidFieldManager(); manager.addTop(new LabelField("Hello World")); HorizontalFieldManager buttonPanel = new HorizontalFieldManager (Field.FIELD_HCENTER | Field.USE_ALL_WIDTH); buttonPanel.add(new ButtonField("Button 1")); buttonPanel.add(new ButtonField("Button 2")); manager.addBottom(buttonPanel); manager.setEyelidDisplayTime(3000); add(manager); } }

Mostrar un campo en una posicin absoluta en la pantalla


Puede utilizar la clase AbsoluteFieldManager para especificar una posicin absoluta, basada en las coordenadas x-y, de un campo en una pantalla en lugar de una posicin que sea relativa a otros campos en la pantalla. Puede utilizar la clase AbsoluteFieldManager para controlar la ubicacin de los campos y para superponer campos en la pantalla.

50

Gua de desarrollo

Mostrar un campo en una posicin absoluta en la pantalla

Mostrar una etiqueta en una posicin absoluta en la pantalla


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.component.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase AbsoluteFieldManagerDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class AbsoluteFieldManagerDemo extends UiApplication { public static void main(String[] args) { AbsoluteFieldManagerDemo app = new AbsoluteFieldManagerDemo(); app.enterEventDispatcher(); } public AbsoluteFieldManagerDemo() { pushScreen(new AbsoluteFieldManagerDemoScreen()); } }

3.

Cree el marco para la pantalla personalizada ampliando la clase MainScreen. Invoque setTitle() para especificar el texto que aparece en la seccin del ttulo de la pantalla.
class AbsoluteFieldManagerDemoScreen extends MainScreen { public AbsoluteFieldManagerDemoScreen() { setTitle("AbsoluteFieldManager Demo"); } }

4. 5.

En el constructor de pantalla, cree una instancia de la clase AbsoluteFieldManager.


AbsoluteFieldManager manager = new AbsoluteFieldManager();

En el constructor de pantalla, cree e inicialice una variable para almacenar la coordenada Y que corresponde al centro vertical de la pantalla.
int halfwayDown = Display.getHeight() / 2;

6.

En el constructor de pantalla, invoque AbsoluteFieldManager.add() para agregar un objeto LabelField en el centro vertical de la pantalla y una coordenada X de 2.
manager.add(new LabelField("Hello world"), 2, halfwayDown);

7.

En el constructor de pantalla, invoque add() para agregar AbsoluteFieldManager a la pantalla.


add(manager); 51

Gua de desarrollo

Mostrar un campo en una posicin absoluta en la pantalla

Ejemplo de cdigo: mostrar una etiqueta en una posicin absoluta en la pantalla


import import import import public { net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.component.*; class AbsoluteFieldManagerDemo extends UiApplication public static void main(String[] args) { AbsoluteFieldManagerDemo app = new AbsoluteFieldManagerDemo(); app.enterEventDispatcher(); } public AbsoluteFieldManagerDemo() { pushScreen(new AbsoluteFieldManagerDemoScreen()); }

} class AbsoluteFieldManagerDemoScreen extends MainScreen { public AbsoluteFieldManagerDemoScreen() { setTitle("AbsoluteFieldManager Demo"); AbsoluteFieldManager manager = new AbsoluteFieldManager(); int halfwayDown = Display.getHeight() / 2; manager.add(new LabelField("Hello world"), 2, halfwayDown); add(manager); } }

52

Gua de desarrollo

Componentes de la interfaz de usuario

Componentes de la interfaz de usuario


Agregar un componente de interfaz de usuario a una pantalla
1. Importe las siguientes clases: net.rim.device.api.ui.component.CheckboxField net.rim.device.api.ui.container.MainScreen Cree una instancia de un componente de la interfaz de usuario.
CheckboxField myCheckbox = new CheckboxField("First checkbox", true);

2. 3.

Agregue el componente de interfaz de usuario a su extensin de la clase Screen.


mainScreen.add(myCheckbox);

Alinear un campo con una lnea de texto


Puede crear una aplicacin que pueda alinear un objeto Field con el principio natural de una lnea de texto mediante el indicador Field.FIELD_LEADING. Por ejemplo, si crea un objeto Field con el indicador de alineacin Field.FIELD_LEADING y agrega el objeto Field a VerticalFieldManager, si la aplicacin comienza a utiliza la configuracin regional en ingls o en chino, por ejemplo, el objeto Field se alinea a la izquierda de la pantalla. Si la aplicacin comienza a utilizar la configuracin regional en rabe o hebreo, el objeto Field se alinea a la derecha de la pantalla.

Botones
Utilice botones para permitir a los usuarios realizar una accin desde un cuadro de dilogo. Los mens incluyen normalmente las acciones que estn asociadas a una pantalla. Los usuarios pueden realizar las acciones siguientes con un botn: Slo dispositivos BlackBerry con panel tctil Desplazar un dedo en el panel tctil. Hacer clic con el botn o pulsar la tecla Intro. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Tocar el botn levemente. Desplazar un dedo en el panel tctil. Tocar el elemento. Hacer clic en el panel tctil. Pulse la tecla Intro.

Accin Seleccionar un botn. Llevar a cabo una accin.

53

Gua de desarrollo

Botones

Prctica recomendada: implementar botones


Evite el uso de botones en la pantalla de una aplicacin. Para proporcionar las acciones asociadas a una pantalla, utilice el men de la aplicacin en su lugar. En dispositivosBlackBerry con panel tctil, el men est disponible para los usuarios de forma inmediata, independientemente de la posicin del cursor en la pantalla. Los botones son estticos y requieren que los usuarios seleccionen el botn con el fin de realizar la accin asociada. Si utiliza los botones, incluya tambin elementos de men para las acciones en el men de la aplicacin. En dispositivosBlackBerry con pantalla tctil, puede utilizar los botones para acciones crticas. Utilice casillas de verificacin para opciones como la activacin o desactivacin de una caracterstica. Utilice la clase ButtonField para crear botones de opcin. Para el botn predeterminado, debe utilizar el botn que con toda probabilidad seleccionarn los usuarios. Evite utilizar un botn asociado a una accin destructiva como botn predeterminado. Utilice etiquetas claras y concisas. Utilice etiquetas de una sola palabra siempre que sea posible. El tamao de un botn cambia dependiendo de la longitud de la etiqueta. Si una etiqueta es demasiado larga, aparecern puntos suspensivos (...) para indicar que el texto se ha cortado. Para las etiquetas utilice verbos que describan la accin asociada (por ejemplo, "Cancelar", "Eliminar", "Descartar" o "Guardar"). Si es necesario, incluya texto ms descriptivo en otra parte en la pantalla (por ejemplo, en un mensaje de la aplicacin). Evite la utilizacin de las etiquetas "S" y "No". Evite el uso de puntuacin en una etiqueta. Utilice puntos suspensivos en una etiqueta inferior para indicar que los usuarios deben realizar otra accin despus de hacer clic en el botn.

Directrices para las etiquetas


Crear un botn
1. 2. Importe la clase net.rim.device.api.ui.component.ButtonField. Cree una instancia de ButtonField mediante un parmetro de estilo.

54

Gua de desarrollo

Casillas de verificacin

ButtonField mySubmitButton = new ButtonField("Submit");

Casillas de verificacin
Utilice las casillas de verificacin para opciones binarias que los usuarios puedan comprender fcilmente. Por ejemplo, utilice una casilla de verificacin para una opcin que pueda activarse y desactivarse. Los usuarios pueden llevar a cabo las acciones siguientes con una casilla de verificacin: Slo dispositivos BlackBerry con panel Slo dispositivos BlackBerry con tctil pantalla tctil y panel tctil Pulsar la tecla Espacio o hacer clic en el Tocar el elemento. panel tctil. Pulse la tecla Espacio. Hacer clic en el panel tctil.

Accin Seleccionar una casilla de verificacin.

Prctica recomendada: implementar casillas de verificacin


Utilice casillas de verificacin cuando los usuarios puedan seleccionar varias opciones. Utilice la clase CheckboxField para crear casillas de verificacin. No inicie una accin cuando los usuarios seleccionen un casilla de verificacin. Por ejemplo, no abra una pantalla nueva. Alinee verticalmente las casillas de verificacin. Agrupe y ordene las casillas de verificacin de la forma ms lgica posible (por ejemplo, coloque juntas las opciones relacionadas con grupos o incluir los elementos ms comunes en primer lugar). Evite ordenar las casillas de verificacin alfabticamente; el orden alfabtico es especfico de cada idioma. Utilice etiquetas claras y concisas. Compruebe que la etiqueta describe claramente lo que ocurre cuando los usuarios seleccionan la casilla de verificacin.

Directrices para las etiquetas

55

Gua de desarrollo

Casillas de verificacin

Utilice etiquetas positivas siempre que sea posible. Por ejemplo, si los usuarios tienen la opcin de activar o desactivar una caracterstica, utilice "activar" en lugar de "desactivar" en la etiqueta. Coloque las etiquetas a la derecha de las casillas de verificacin. En la pantalla Opciones, coloque las etiquetas en el lado izquierdo de las casillas de verificacin. Utilice maysculas para las oraciones. Punte las etiquetas para las casillas de verificacin con dos puntos (:).

Crear una casilla de verificacin


1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MyUiScreen, que se describe en el paso 3, representa la pantalla personalizada.
public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla.
class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); } }

4.

En el constructor de pantalla, cree una casilla de verificacin utilizando la clase CheckboxField. En el constructor CheckboxField, especifique la etiqueta para la casilla de verificacin y utilice un valor booleano para indicar si la casilla de verificacin es la seleccin predeterminada (por ejemplo, true indica que, de forma predeterminada, la casilla de verificacin se ha seleccionado). Invoque add() para agregar la casilla de verificacin a la pantalla.

56

Gua de desarrollo

add(new CheckboxField("First Check Box", true)); add(new CheckboxField("Second Check Box", false));

5.

Para cambiar el comportamiento predeterminado de una casilla de verificacin, utilice los estilos que se heredan de la clase Field. Por ejemplo, para crear una casilla de verificacin que los usuarios no puedan cambiar, puede utilizar el estilo READONLY.
add(new CheckboxField("First Check Box", true, this.READONLY));

6.

Para omitir la funcionalidad predeterminada que solicita al usuario guardar los cambios antes de que se cierre la aplicacin, en la extensin de la clase MainScreen, omita el mtodo MainScreen.onSavePrompt(). En el siguiente ejemplo de cdigo, el valor devuelto es true que indica que la aplicacin no preguntar al usuario antes de cerrarse.
public boolean onSavePrompt() { return true; }

Ejemplo de cdigo: crear una casilla de verificacin


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } } class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); add(new CheckboxField("First Check Box", true)); add(new CheckboxField("Second Check Box", false)); } public boolean onSavePrompt() { return true; } }

57

Gua de desarrollo

Crear un mapa de bits

Crear un mapa de bits


1. 2. Importe la clase net.rim.device.api.ui.component.BitmapField. Cree una instancia de BitmapField.
BitmapField myBitmapField = new BitmapField();

Crear un campo personalizado


Slo es posible agregar elementos personalizados de men contextual y diseos personalizados a un campo personalizado. 1. Importe las siguientes clases: net.rim.device.api.ui.Field java.lang.String net.rim.device.api.ui.Font java.lang.Math net.rim.device.api.ui.Graphics Importe la interfaz net.rim.device.api.ui.DrawStyle . Ample la clase Field, o una de sus subclases, implementando la interfaz DrawStyle para especificar las caractersticas del campo personalizado y activar los estilos de dibujo.
public class CustomButtonField extends Field implements DrawStyle { public static final int RECTANGLE = 1; public static final int TRIANGLE = 2; public static final int OCTAGON = 3; private String _label; private int _shape; private Font _font; private int _labelHeight; private int _labelWidth; }

2. 3.

4.

Implemente los constructores para definir la etiqueta, forma y estilo del botn personalizado.
public CustomButtonField(String label) this(label, RECTANGLE, 0); } public CustomButtonField(String label, this(label, shape, 0); } public CustomButtonField(String label, this(label, RECTANGLE, style); } public CustomButtonField(String label, super(style); _label = label; _shape = shape; _font = getFont(); { int shape) { long style) { int shape, long style) {

58

Gua de desarrollo

Crear un campo personalizado

_labelHeight = _font.getHeight(); _labelWidth = _font.getAdvance(_label);

5.

Implemente layout() para especificar la distribucin de los datos en el campo. Lleve a cabo los clculos ms complejos en layout() en lugar de en paint(). El gestor del campo invoca layout() con el fin de determinar cmo distribuye el campo su contenido en el espacio disponible. Invoque Math.min() para devolver el ms pequeo de los valores de anchura y altura, as como la anchura y altura preferida del campo. Invoque Field.setExtent(int,int) para establecer las dimensiones necesarias del campo.
protected void layout(int width, int height) { _font = getFont(); _labelHeight = _font.getHeight(); _labelWidth = _font.getAdvance(_label); width = Math.min( width, getPreferredWidth() ); height = Math.min( height, getPreferredHeight() ); setExtent( width, height ); }

6.

Implemente getPreferredWidth() utilizando las dimensiones relativas de la etiqueta de campo para garantizar que la etiqueta no excede las dimensiones del componente. Utilice un valor switch block para determinar la anchura preferida segn la forma del campo personalizado. Para cada tipo de la forma, utilice una declaracin if para comparar dimensiones y determinar la anchura preferida para el campo personalizado.
public int getPreferredWidth() { switch(_shape) { case TRIANGLE: if (_labelWidth < _labelHeight) { return _labelHeight << 2; } else { return _labelWidth << 1; } case OCTAGON: if (_labelWidth < _labelHeight) { return _labelHeight + 4; } else { return _labelWidth + 8; } case RECTANGLE: default: return _labelWidth + 8; } }

7.

Implemente getPreferredHeight() utilizando las dimensiones relativas de la etiqueta de campo para determinar la altura preferida. Utilice un valor switch block para determinar la altura preferida segn la forma del campo personalizado. Para cada tipo de la forma, utilice una declaracin if para comparar dimensiones y determinar la altura preferida para el campo personalizado.
public int getPreferredHeight() { switch(_shape) { case TRIANGLE: if (_labelWidth < _labelHeight) { return _labelHeight << 1; } else {

59

Gua de desarrollo

Crear un campo personalizado

} return 0;

return _labelWidth; } case RECTANGLE: return _labelHeight + 4; case OCTAGON: return getPreferredWidth();

8.

Implemente paint(). El gestor del campo invoca paint() para volver a dibujar el campo cuando un rea del campo se marque como no vlida. Utilice un valor switch block para volver a pintar un campo personalizado basado en la forma del campo personalizado. Para un campo que tenga forma de tringulo u octgono, utilice la anchura del campo para calcular la posicin horizontal y vertical de los puntos de inicio y fin de las lneas. Invoque graphics.drawLine() y utilice los puntos de inicio y fin para dibujar las lneas que definen el campo personalizado. Para un campo que tenga una forma rectangular, invoque graphics.drawRect() y utilice la anchura y altura del campo para dibujar el campo personalizado. Invoque graphics.drawText() y utilice la anchura del campo para dibujar una cadena de texto en un rea del campo.
protected void paint(Graphics graphics) { int textX, textY, textWidth; int w = getWidth(); switch(_shape) { case TRIANGLE: int h = (w>>1); int m = (w>>1)-1; graphics.drawLine(0, h-1, m, 0); graphics.drawLine(m, 0, w-1, h-1); graphics.drawLine(0, h-1, w-1, h-1); textWidth = Math.min(_labelWidth,h); textX = (w - textWidth) >> 1; textY = h >> 1; break; case OCTAGON: int x = 5*w/17; int x2 = w-x-1; int x3 = w-1; graphics.drawLine(0, x, 0, x2); graphics.drawLine(x3, x, x3, x2); graphics.drawLine(x, 0, x2, 0); graphics.drawLine(x, x3, x2, x3); graphics.drawLine(0, x, x, 0); graphics.drawLine(0, x2, x, x3); graphics.drawLine(x2, 0, x3, x); graphics.drawLine(x2, x3, x3, x2); textWidth = Math.min(_labelWidth, w - 6); textX = (w-textWidth) >> 1; textY = (w-_labelHeight) >> 1; break; case RECTANGLE: default: graphics.drawRect(0, 0, w, getHeight()); textX = 4; textY = 2; textWidth = w - 6; break;

60

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

} graphics.drawText(_label, textX, textY, (int)( getStyle() & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK ), textWidth ); }

9.

Implemente los mtodos Field set() y get(). Implemente los mtodos Field.getLabel(), Field.getShape(), Field.setLabel(String label) y Field.setShape(int shape) para devolver las variables de instancia del campo personalizado.
public String getLabel() { return _label; } public int getShape() { return _shape; } public void setLabel(String label) { _label = label; _labelWidth = _font.getAdvance(_label); updateLayout(); } public void setShape(int shape) { _shape = shape; }

Creacin de un campo para mostrar contenido Web


Mostrar contenido HTML en un campo de navegador
1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.browser.field2.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } }

3.

Cree la pantalla personalizada ampliando la clase MainScreen.


61

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { } }

4. 5. 6.

En el constructor de pantalla, cree una instancia de la clase BrowserField.


BrowserField myBrowserField = new BrowserField();

En el constructor de pantalla, invoque add() para agregar el objeto BrowserField a la pantalla.


add(myBrowserField);

En el constructor de pantalla, invoque BrowserField.displayContent() para especificar y mostrar el contenido HTML.


myBrowserField.displayContent("<html><body><h1>Hell o World!</h1></body></html>", "http://localhost");

Ejemplo de cdigo: mostrar contenido HTML en un campo del navegador


import net.rim.device.api.browser.field2.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } } class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { BrowserField myBrowserField = new BrowserField(); add(myBrowserField); myBrowserField.displayContent("<html><body><h1>Hello World!</h1></body></html>", "http://localhost"); } }

Mostrar contenido HTML de una pgina Web en un campo de navegador


1. Importe las clases y las interfaces necesarias.

62

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

import import import import

net.rim.device.api.browser.field2.*; net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } }

3.

Cree el marco para la pantalla personalizada ampliando la clase MainScreen.


class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { } }

4. 5. 6.

En el constructor de pantalla, cree una instancia de la clase BrowserField.


BrowserField myBrowserField = new BrowserField();

En el constructor de pantalla, invoque add() para agregar el objeto BrowserField a la pantalla.


add(myBrowserField);

En el constructor de pantalla, invoque BrowserField.requestContent() para especificar la ubicacin del contenido HTML y mostrarlo.
myBrowserField.requestContent("http://www.blackberry.com");

Ejemplo de cdigo: mostrar contenido HTML desde una pgina Web en un campo del navegador
import net.rim.device.api.browser.field2.*; import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) 63

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

} class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { BrowserField myBrowserField = new BrowserField(); add(myBrowserField); myBrowserField.requestContent("http://www.blackberry.com"); } }

} public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); }

BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher();

Mostrar contenido HTML de un recurso en su aplicacin


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.browser.field2.*; net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } }

3.

Cree la pantalla personalizada ampliando la clase MainScreen.


class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { } }

64

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

4. 5. 6.

En el constructor de pantalla, cree una instancia de la clase BrowserField.


BrowserField myBrowserField = new BrowserField();

En el constructor de pantalla, invoque add() para agregar el objeto BrowserField a la pantalla.


add(myBrowserField);

En el constructor de pantalla, invoque BrowserField.requestContent() para especificar la ubicacin del recurso en su aplicacin y mostrar el contenido HTML.
myBrowserField.requestContent("local:///test.html");

Nota: La clase BrowserField no accede a los recursos utilizando una estructura de carpetas. La clase BrowserField muestra el primer recurso encontrado que coincide con el nombre de archivo especificado.

Ejemplo de cdigo: mostrar contenido HTML de un recurso de su aplicacin


import net.rim.device.api.browser.field2.*; import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } } class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { BrowserField myBrowserField = new BrowserField(); add(myBrowserField); myBrowserField.requestContent("local:///test.html"); } }

Configurar un campo de navegador


1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.browser.field2.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*;

65

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } }

3.

Cree el marco de la pantalla personalizada ampliando la clase MainScreen.


class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { } }

4. 5.

En el constructor de pantalla, cree una instancia de la clase BrowserFieldConfig.


BrowserFieldConfig myBrowserFieldConfig = new BrowserFieldConfig();

En el constructor de pantalla, invoque BrowserFieldConfig.setProperty() para especificar una propiedad de BrowserField. El primer parmetro de setProperty() especifica la propiedad, y el segundo especifica el valor de la propiedad. Por ejemplo, el ejemplo de cdigo siguiente especifica la propiedad NAVIGATION_MODE de un objeto BrowserField:
myBrowserFieldConfig.setProperty(BrowserFieldConfig.NAVIGATION_MODE, BrowserFieldConfig.NAVIGATION_MODE_POINTER);

6.

En el constructor de pantalla, cree una instancia de la clase BrowserField que utilice la configuracin que ha definido.
BrowserField browserField = new BrowserField(myBrowserFieldConfig);

Ejemplo de cdigo: configurar un campo del navegador


import net.rim.device.api.browser.field2.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo();

66

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

} class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { BrowserFieldConfig myBrowserFieldConfig = new BrowserFieldConfig(); myBrowserFieldConfig.setProperty(BrowserFieldConfig .NAVIGATION_MODE,BrowserFieldConfig.NAVIGATION_MODE_POINTER); BrowserField browserField = new BrowserField(myBrowserFieldConfig); } }

app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); }

Enviar datos de formularios a una direccin Web en un campo de navegador


1. Importe las clases y las interfaces necesarias.
import import import import import import import net.rim.device.api.browser.field2.*; net.rim.device.api.io.http.*; net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*; java.lang.*; java.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase BrowserFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); } }

3.

Cree la pantalla personalizada ampliando la clase MainScreen.


class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() 67

Gua de desarrollo

Creacin de un campo para mostrar contenido Web

{ }

4. 5. 6.

En el constructor de pantalla, cree una instancia de la clase BrowserField.


BrowserField browserField = new BrowserField();

En el constructor de pantalla, invoque add() para agregar el objeto BrowserField a la pantalla.


add(browserField);

En el constructor de pantalla, cree un objeto String que contenga la direccin Web bsica de la pgina Web a la que va a enviar los datos de formularios.
String baseURL = "http://www.blackberry.com";

7.

En el constructor de pantalla, cree un objeto String que especifique los datos de formularios que la aplicacin enva a la pgina Web.
String postData = "fieldname1=value1&fieldname2=value2";

8.

En el constructor de pantalla, cree un objeto Hashtable para almacenar la informacin de encabezado para los datos de formulario.
Hashtable header = new Hashtable();

9.

En el constructor de pantalla, invoque Hashtable.put() para especificar la informacin de encabezado para los datos de formulario.
header.put("Content-Length", "" + postData.length()); header.put("Content-Type", "application/x-www-form-urlencoded");

10. En el constructor de pantalla, invoque BrowserField.requestContent() para enviar los datos de formulario a la pgina Web y mostrar la pgina Web.
browserField.requestContent(baseURL, postData.getBytes(), new HttpHeaders(header));

Ejemplo de cdigo: enviar los datos del formulario a una direccin Web en un campo del navegador
import net.rim.device.api.browser.field2.*; import net.rim.device.api.io.http.*; import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import java.lang.*; import java.util.*; public class BrowserFieldDemo extends UiApplication { public static void main(String[] args) { BrowserFieldDemo app = new BrowserFieldDemo(); app.enterEventDispatcher(); } 68

Gua de desarrollo

Cuadros de dilogo

} class BrowserFieldDemoScreen extends MainScreen { public BrowserFieldDemoScreen() { BrowserField browserField = new BrowserField();} add(browserField); String baseURL = "http://www.blackberry.com"; String postData = "fieldname1=value1&fieldname2=value2"; Hashtable header = new Hashtable(); header.put("Content-Length", "" + postData.length()); header.put("Content-Type", "application/x-www-form-urlencoded"); browserField.requestContent(baseURL, postData.getBytes(), new HttpHeaders(header)); } }

public BrowserFieldDemo() { pushScreen(new BrowserFieldDemoScreen()); }

Cuadros de dilogo
Utilice los cuadros de dilogo para realizar las siguientes acciones: Pedir a los usuarios la informacin necesaria para finalizar una tarea iniciada por un usuario. Transmitir a los usuarios informacin urgente o el estado de acciones importantes. Advertir a los usuarios sobre condiciones o situaciones inesperadas o que puedan resultar destructivas.

Los cuadros de dilogo son modales; interrumpen el funcionamiento normal del dispositivo BlackBerry y se insertan en la parte superior de la pila. Un cuadro de dilogo incluye un mensaje, los botones que permiten a los usuarios llevar a cabo una accin y un indicador que muestra el tipo de cuadro de dilogo. El tamao de los cuadros de dilogo depende del tamao de la pantalla del dispositivo BlackBerry. El tema que seleccionan los usuarios en el dispositivo BlackBerry determina el estilo visual del cuadro de dilogo.

69

Gua de desarrollo

Cuadros de dilogo

Prctica recomendada: implementar cuadros de dilogo


Utilice botones para confirmar o cancelar acciones en los cuadros de dilogo. Evite el uso de vnculos u otros componentes. Utilice un indicador estndar que sea apropiado para el tipo de cuadro de dilogo. Evite utilizar varios indicadores en un cuadro de dilogo. Intente evitar que los usuarios realicen desplazamientos en un cuadro de dilogo. Incluya flechas de desplazamiento si el mensaje del cuadro de dilogo o los botones no se pueden mostrar al completo en el cuadro de dilogo. Si utiliza componentes estndar, las flechas de desplazamiento aparecen automticamente si es necesario. Permita siempre a los usuarios utilizar la tecla Escape para cerrar un cuadro de dilogo. Evite implementar otra accin cuando los usuarios pulsen la tecla Escape para cerrar un cuadro de dilogo. Por ejemplo, si un cuadro de dilogo permite a los usuarios cambiar una configuracin, no implemente ningn cambio cuando los usuarios pulsen la tecla Escape. Si es necesario, muestre el cuadro de dilogo posteriormente. Si los usuarios pulsan la tecla de de encendido y finalizacin cuando aparece un cuadro de dilogo en una pantalla de la aplicacin, muestre la pantalla de inicio o la lista de aplicaciones. Si los usuarios vuelven a la aplicacin, muestre el cuadro de dilogo de nuevo. Centre el cuadro de dilogo en la pantalla. Si utiliza componentes estndar, el dispositivo BlackBerry centrar automticamente el cuadro de dilogo. Cree cuadros de dilogo que alcancen, pero que no superen, el 90% de la anchura y la altura de la pantalla. Si utiliza componentes estndar, el dispositivo BlackBerry calcula automticamente el tamao apropiado para los cuadros de dilogo. Centre el indicador del cuadro de dilogo verticalmente con el mensaje del cuadro de dilogo. Muestre los mensajes a la derecha del indicador y sobre cualquier botn para la mayora de los idiomas. Coloque en primer lugar los botones para las acciones de confirmacin. Por ejemplo, coloque "Guardar" antes de "Descartar" o "Cancelar". Centre los botones horizontalmente en los cuadros de dilogo. Coloque los botones verticalmente en el cuadro de dilogo. El diseo vertical permite a los botones expandirse para alojar etiquetas de botn localizadas. Si incluye una casilla de verificacin, haga coincidir la alineacin de la casilla de verificacin con la alineacin del mensaje del cuadro de dilogo. Coloque la casilla de verificacin encima de los botones. La casilla de verificacin debe estar marcada de forma predeterminada, a menos que el cuadro de dilogo muestre un mensaje con informacin crtica para los usuarios.

Directrices para el diseo


70

Gua de desarrollo

Cuadros de dilogo

Directrices para mensajes


Sea especfico. En el caso de que sea posible, utilice una frase breve para indicar claramente la razn para mostrar el cuadro de dilogo y las acciones que pueden desactivarlo. Utilice oraciones completas para los mensajes siempre que le sea posible. Utilice vocabulario que los usuarios comprendan. Por ejemplo, utilice "El archivo no se pudo guardar porque la tarjeta de memoria est llena" en lugar de "Error al escribir el archivo en disco". Utilice un lenguaje positivo siempre que le sea posible y evite culpar al usuario. No escriba nunca mensajes que culpen a los usuarios de errores o condiciones inesperadas. En su lugar, cntrese en las acciones que los usuarios pueden poner en marcha para resolver el problema. Utilice la segunda persona (usted, suyo) para referirse a los usuarios. Utilice maysculas para las oraciones. Evite el uso del signo de exclamacin (!) en los mensajes. Evite utilizar puntos suspensivos (...) en los mensajes a menos indique el progreso (por ejemplo, "Espere...). Para el botn predeterminado, debe utilizar el botn que con toda probabilidad seleccionarn los usuarios. Evite utilizar un botn asociado a una accin destructiva como botn predeterminado. Una excepcin a esta regla la constituyen aquellos casos en los que los usuarios inician una accin destructiva menor (como eliminar un nico elemento) y la accin ms comn de los usuarios consiste en continuar con la accin. Evite utilizar ms de tres botones en un cuadro de dilogo. Si hay ms de tres, considere utilizar una pantalla de la aplicacin en lugar de botones de opcin. BlackBerry con un teclado fsico, proporcionan teclas de atajo para los botones. Normalmente, la tecla de atajo es la primera letra de la etiqueta de botn. Utilice etiquetas claras y concisas. Utilice etiquetas de una sola palabra siempre que sea posible. El tamao de un botn cambia dependiendo de la longitud de la etiqueta. Si una etiqueta es demasiado larga, aparecern puntos suspensivos (...) para indicar que el texto se ha cortado.

Directrices para los botones

71

Gua de desarrollo

Listas desplegables

Evite utilizar las etiquetas "S" y "No". Utilice verbos que describan la accin asociada (por ejemplo, "Cancelar", "Eliminar", "Descartar" o "Guardar"). Este enfoque ayuda a los usuarios a comprender rpida y fcilmente lo que sucede cuando hacen clic en un botn. Si es necesario, incluya texto ms descriptivo en otra parte en la pantalla (por ejemplo, en un mensaje de la aplicacin). Evite la utilizacin de smbolos o grficos en una etiqueta. Evite el uso de puntuacin en las etiquetas. Utilice puntos suspensivos en una etiqueta de botn para indicar que es necesaria informacin adicional antes de que la accin asociada pueda realizarse.

Crear un cuadro de dilogo


Utilice los cuadros de dilogo de alerta para comunicar a los usuarios una accin crtica como la desactivacin del dispositivo BlackBerry o un error, por ejemplo, escribir informacin que no sea vlida. Aparecer un indicador de signo de exclamacin (!) en el cuadro de dilogo de alerta. Para cerrar un cuadro de dilogo de alerta, los usuarios pueden hacer clic en Aceptar o pulsar la tecla Escape. Para obtener ms informacin acerca de los tipos de cuadros de dilogo, consulte la referencia API de BlackBerry Java Development Environment. 1. 2. Importe la clase net.rim.device.api.ui.component.Dialog. Cree un cuadro de dilogo de alerta que especifique el texto de alerta que desea mostrar.
Dialog.alert("Specify the alert text that you want to display.")

Listas desplegables
Utilice listas desplegables para proporcionar un conjunto de valores mutuamente exclusivos. Los usuarios pueden llevar a cabo las acciones siguientes con una lista desplegable: Slo dispositivos BlackBerry con panel tctil Pulsar la tecla Intro o hacer clic en el panel tctil. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Tocar el elemento. Pulse la tecla Intro. Hacer clic en el panel tctil.

Accin Hacer clic en un valor de la lista desplegable.

72

Gua de desarrollo

Listas desplegables

Prctica recomendada: implementar listas desplegables


Utilice una lista desplegable para dos o ms opciones cuando el espacio sea un problema. Si el espacio no supone ningn problema, considere la utilizacin de los botones de opcin de forma que los usuarios puedan ver las opciones disponibles en la pantalla. Utilice la clase ObjectChoiceField o NumericChoiceField para crear listas desplegables. Para el valor predeterminado, debe utilizar el valor que con toda probabilidad seleccionarn los usuarios. Utilice la opcin seleccionada como punto central predeterminado cuando los usuarios se desplacen a travs de la lista. En el caso de que no sea necesario que los usuarios hagan clic en un valor, incluya un valor "None" en la lista desplegable. Coloque siempre este valor "None" en la parte superior de la lista. Agrupe y ordene los valores de la forma ms lgica posible (por ejemplo, coloque juntos valores relacionados por grupo o incluya los valores ms comunes en primer lugar). Evite ordenar los valores alfabticamente; el orden alfabtico es especfico de cada idioma. Utilizar etiquetas claras y concisas para las listas desplegables y para los valores en una lista desplegable. Compruebe que la etiqueta describe claramente lo que ocurre cuando los usuarios hacen clic en el valor. El ancho de la lista desplegable cambia segn la longitud de las etiquetas de valor. Si una etiqueta es demasiado larga, aparecern puntos suspensivos (...) para indicar que el texto se ha cortado. Evite el uso de etiquetas "S" y "No" como valores de lista desplegable. Reformule la opcin y utilice una casilla de verificacin en su lugar. Coloque la etiqueta en el lado izquierdo de una lista desplegable. Utilice maysculas para las etiquetas y valores de las listas desplegables (a menos que los valores se lean como si se tratara de una oracin). Punte las etiquetas de las listas desplegables con dos puntos (:).

Directrices para las etiquetas

Crear una lista desplegable


1. Importe las clases y las interfaces necesarias.
73

Gua de desarrollo

Listas desplegables

import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MyUiScreen, que se describe en el paso 3, representa la pantalla personalizada.
public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla.
class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); } }

4.

En el constructor de pantalla, cree una lista desplegable que muestre una lista de palabras u oraciones utilizando la clase ObjectChoiceField. Cree una matriz de String para almacenar los elementos que desea mostrar en la lista desplegable. Cree un objeto int para almacenar el elemento predeterminado que se va a mostrar en la lista desplegable. En el constructor ObjectChoiceField, especifique la etiqueta para la lista desplegable, la matriz de elementos a mostrar y el elemento predeterminado. En el siguiente cdigo de ejemplo, se mostrar Mircoles de forma predeterminada. Invoque add() para agregar la lista desplegable a la pantalla.
String choices[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; int iSetTo = 2; add(new ObjectChoiceField("First Drop-down List",choices,iSetTo));

5.

En el constructor de pantalla, cree una segunda lista desplegable que muestre una lista de nmeros utilizando la clase NumericChoiceField. En el constructor NumericChoiceField, especifique la etiqueta de la lista desplegable, el primer y ltimo nmero a mostrar en la lista desplegable, el incremento a utilizar para la lista de nmeros y el nmero predeterminado. En el siguiente ejemplo de cdigo, los parmetros numricos se almacenan en objetos int. Los nmeros del 1 al 31 se incluyen en la lista desplegable y, de forma predeterminada, se muestre el nmero 10. Invoque add() para agregar la segunda lista desplegable a la pantalla.

74

Gua de desarrollo

Listas desplegables

int iStartAt = 1; int iEndAt = 31; int iIncrement = 1; iSetTo = 10; add(new NumericChoiceField("Numeric Drop-Down List",iStartAt,iEndAt,iIncrement,iSetTo));

6.

Para omitir la funcionalidad predeterminada que solicita al usuario guardar los cambios antes de que se cierre la aplicacin, en la extensin de la clase MainScreen, omita el mtodo MainScreen.onSavePrompt(). En el siguiente ejemplo de cdigo, el valor devuelto es true que indica que la aplicacin no preguntar al usuario antes de cerrarse.
public boolean onSavePrompt() { return true; }

Ejemplo de cdigo: crear una lista desplegable


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } } class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); String choices[] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; int iSetTo = 2; add(new ObjectChoiceField("First Drop-down List",choices,iSetTo)); int iStartAt = 1; int iEndAt = 31; int iIncrement = 1; iSetTo = 10; add(new NumericChoiceField("Numeric Drop-Down List",iStartAt,iEndAt,iIncrement,iSetTo)); } public boolean onSavePrompt() {

75

Gua de desarrollo

Etiquetas

return true;

Etiquetas
Utilice una etiqueta para mostrar texto que identifique un control.

Prctica recomendada: implementar etiquetas


Utilice la clase LabelField para crear etiquetas. Utilice etiquetas claras y concisas. Agrupe y ordene las etiquetas de la forma ms lgica posible (por ejemplo, coloque juntos elementos de grupos relacionados o incluya los elementos ms comunes en primer lugar). Evite ordenar los valores alfabticamente; el orden alfabtico es especfico de cada idioma. Punte la etiqueta con dos puntos (:).

Crear una etiqueta de texto


1. 2. Importe la clase net.rim.device.api.ui.component.LabelField. Cree una instancia de LabelField para agregar una etiqueta de texto a una pantalla.
LabelField title = new LabelField("UI Component Sample", LabelField.ELLIPSIS);

Listas y tablas
Utilice listas y tablas para mostrar los elementos que los usuarios pueden seleccionar y abrir. Si la lista es larga, los elementos se capturan y muestran por lotes. Cuando los usuarios alcanzan el ltimo elemento de la lista, el siguiente lote de elementos se muestra al final de la lista. Utilice una lista sencilla para mostrar fcilmente el texto en filas.

76

Gua de desarrollo

Listas y tablas

Utilice una lista enriquecida para mostrar fcilmente filas de texto e iconos. Actualmente, las listas enriquecisas slo muestran informacin y no son interactivas.

Si desea presentar los elementos en columnas y filas, utilice una tabla.

77

Gua de desarrollo

Listas y tablas

Puede agrupar los elementos bajo encabezados para ayudar a los usuarios a desplazarse por las listas ms largas. Por ejemplo, puede crear encabezados que se contraigan, facilitando as a los usuarios el poder encontrar elementos en la lista.

Tambin puede agrupar elementos bajo encabezados que siempre aparezcan en la parte superior de la lista. Por ejemplo, puede agregar una fecha como encabezado y los mensajes en grupo recibidos en esa fecha bajo el encabezado. Los usuarios pueden seleccionar un encabezado para realizar una accin en el grupo de elementos o pueden utilizar teclas de atajo para desplazarse a travs de la lista.

Los usuarios pueden realizar las siguientes acciones en las listas y las tablas: Slo dispositivos BlackBerry con panel tctil Desplazar un dedo verticalmente en el panel tctil. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Arrastrar un dedo verticalmente en la pantalla. Deslizar hacia arriba o hacia abajo en la pantalla.

Accin Desplazarse por los elementos en la lista.

78

Gua de desarrollo

Listas y tablas

Accin

Slo dispositivos BlackBerry con panel tctil

Slo dispositivos BlackBerry con pantalla tctil y panel tctil Desplazar un dedo verticalmente en el panel tctil. Tocar el elemento levemente. Desplazar un dedo verticalmente en el panel tctil. Tocar el elemento. Hacer clic en el panel tctil. Pulse la tecla Intro.

Seleccionar un elemento en una lista. Abrir un elemento en la lista.

Desplazar un dedo verticalmente en el panel tctil. Hacer clic en el panel tctil. Pulse la tecla Intro.

Prctica recomendada: implementar listas y tablas


Utilice la clase SimpleList para crear una lista con texto. Utilice la clase RichList para crear una lista solo de muestra con texto e iconos. Utilice la clase TableView para crear una lista enriquecida interactiva con texto e iconos. Utilice la clase TableView para crear una tabla con filas y columnas. Puede utilizar GridFieldManager si el nmero de filas y columnas de la tabla est corregido. Si la lista es larga y desea mostrar los elementos en pantallas separadas, incluya los botones Siguiente y Anterior en la parte inferior de la pantalla. De forma alternativa, si la lista es muy larga (por ejemplo, miles de elementos), debe proporcionar nmeros de pantalla en su lugar. Si espera que los usuarios se desplacen por los elementos de la lista (por ejemplo, en una lista del mensaje o un fuente de contenido), debe asignar teclas de atajo para desplazarse al siguiente o al anterior elemento de la lista. Siempre que sea posible, en ingls, permita a los usuarios pulsar "N" para desplazarse al siguiente elemento en la lista y "P" para desplazarse al elemento anterior de la lista.

Crear un cuadro de lista


Utilice un cuadro de lista para mostrar una lista en la que los usuarios puedan seleccionar uno o ms valores. 1. Importe las siguientes clases:
import import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; java.util.Vector;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor, invoque pushScreen para mostrar la pantalla personalizada de la aplicacin. La clase CreateMenuScreen representa la pantalla personalizada, que se describe en el paso 3.
public class ListFields extends UiApplication { public static void main(String[] args) 79

Gua de desarrollo

Listas y tablas

} public ListFields() { pushScreen(new ListFieldScreen()); }

ListFields theApp = new ListFields(); theApp.enterEventDispatcher();

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor, invoque setTitle() para mostrar el ttulo de la pantalla. Invoque add() para mostrar un campo de texto en la pantalla. Invoque addMenuItem() para agregar un elemento de men al men que crea MainScreen.
class ListFieldScreen extends MainScreen { private ListField _listField; private Vector _listElements; public ListFieldScreen() { setTitle("List Field Sample"); } }

4.

En el constructor de pantalla, cree el cuadro de lista. Cree una matriz para los elementos que quiere agregar al cuadro de lista utilizando la clase Vector. Cree el cuadro de lista utilizando la clase ListField(). Invoque add() para agregar el cuadro de lista a la pantalla. Invoque initializeList(), que se describe en el paso 4, para agregar y construir el cuadro de lista.
_listElements = new Vector(); _listField = new ListField(); ListCallback _callback = new ListCallback(); _listField.setCallback(_callback); add(_listField); initializeList();

5.

Cree un mtodo para especificar los elementos que quiera que aparezcan en el cuadro de lista utilizando el objeto String. Invoque addElement() para agregar los elementos a la lista. Invoque setSize() para especificar el nmero de elementos en el cuadro de lista.
private void initializeList() { String itemOne = "List item one"; String itemTwo = "List item two"; _listElements.addElement(itemOne); _listElements.addElement(itemTwo); reloadList(); } private void reloadList() { _listField.setSize(_listElements.size()); }

80

Gua de desarrollo

Botones de opcin

6.

Cree una clase que implemente la interfaz ListFieldCallback. Implemente drawListRow() para agregar los elementos de cuadro de la lista a la pantalla. Implemente get() para devolver el elemento de cuadro de lista al ndice especificado. Implemente indexOfList() para devolver la primera ocurrencia de una cadena dada. Implemente getPreferredWidth(), para recuperar la anchura del cuadro de lista.
private class ListCallback implements ListFieldCallback { public void drawListRow(ListField list, Graphics g, int index, int y, int w) { String text = (String)_listElements.elementAt(index); g.drawText(text, 0, y, 0, w); } public Object get(ListField list, int index) { return _listElements.elementAt(index); } public int indexOfList(ListField list, String prefix, int string) { return _listElements.indexOf(prefix, string); } public int getPreferredWidth(ListField list) { return Display.getWidth(); } }

Botones de opcin
Utilice botones de opcin para indicar un conjunto de opciones que se excluyan entre s pero que estn relacionadas al mismo tiempo. Los usuarios pueden realizar las acciones siguientes con botones de opcin: Slo dispositivos BlackBerry con panel Slo dispositivos BlackBerry con tctil pantalla tctil y panel tctil Pulsar la tecla Espacio o hacer clic en el Tocar el elemento. panel tctil. Pulse la tecla Espacio. Hacer clic en el panel tctil.

Accin Seleccionar un botn de opcin.

81

Gua de desarrollo

Botones de opcin

Prctica recomendada: implementar botones de opcin


Utilice botones de opcin para dos o opciones cuando el espacio no sea un problema. Si el espacio es un problema, considere la utilizacin de una lista desplegable en su lugar. Utilice la clase RadioButtonField para crear botones de opcin. Compruebe que el contenido para los botones de opcin permanece esttico. El contenido de los botones de opcin no debe cambiar dependiendo del contexto. No inicie una accin cuando los usuarios seleccionen un botn de opcin. Por ejemplo, no abra una pantalla nueva. Alinee los botones de opcin verticalmente. Agrupe y ordene los valores de la forma ms lgica posible (por ejemplo, coloque juntos botones de opcin relacionados por grupo o incluya los valores ms comunes en primer lugar). Evite ordenar los botones de opcin alfabticamente; el orden alfabtico es especfico de cada idioma. Utilice etiquetas claras y concisas. Compruebe que la etiqueta describe claramente lo que ocurre cuando los usuarios seleccionan el botn de opcin. Si las etiquetas son demasiado largas, deber ajustarlas. Coloque la etiqueta en el lado derecho de los botones de opcin. Utilice maysculas para las oraciones. No utilice punto final.

Directrices para las etiquetas


Crear un botn de opcin


Puede crear un grupo de botones de opcin mediante la clase RadioButtonGroup. El usuario slo puede seleccionar una opcin de un grupo de botones de opcin. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

82

Gua de desarrollo

Botones de opcin

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MyUiScreen que se describe en el paso 3, representa la pantalla personalizada.
public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla.
class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); } }

4.

En el constructor de pantalla, cree un grupo de botones de opcin utilizando la clase RadioButtonGroup. Cree los botones de opcin que desee agregar al grupo utilizando la clase RadioButtonField. En el constructor RadioButtonField, especifique la etiqueta para el botn de opcin, el grupo y un valor booleano para indicar la seleccin predeterminada (por ejemplo, true indica que la opcin se selecciona de forma predeterminada). Invoque add() para agregar los botones de opcin a la pantalla.
RadioButtonGroup rbg = new RadioButtonGroup(); add(new RadioButtonField("Option 1",rbg,true)); add(new RadioButtonField("Option 2",rbg,false));

5.

Para omitir la funcionalidad predeterminada que solicita al usuario guardar los cambios antes de que se cierre la aplicacin, en la extensin de la clase MainScreen, omita el mtodo MainScreen.onSavePrompt(). En el siguiente ejemplo de cdigo, el valor devuelto es true que indica que la aplicacin no preguntar al usuario antes de cerrarse.
public boolean onSavePrompt() { return true; }

83

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

Ejemplo de cdigo: crear un botn de opcin


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); } public MyUi() { pushScreen(new MyUiScreen()); } } class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); RadioButtonGroup rbg = new RadioButtonGroup(); add(new RadioButtonField("Option 1",rbg,true)); add(new RadioButtonField("Option 2",rbg,false)); } public boolean onSavePrompt() { return true; } }

Indicadores de actividad e indicadores de progreso


Los indicadores de actividad y de progreso muestran a los usuarios que sus dispositivos BlackBerry llevan a cabo una accin, por ejemplo, las bsqueda de elementos o la eliminacin de idiomas. Utilice un indicador de actividad si desea mostrar que el dispositivo BlackBerry est funcionando y que no puede determinar la duracin de la accin. Puede agregar un indicador de actividad a cualquier componente, por ejemplo, una pantalla, un campo de texto o un elemento de la lista. Tambin puede agregar texto a un indicador de actividad para describir la accin.

84

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

Un indicador de actividad en un campo

Un indicador de actividad con texto

Utilice un indicador de progreso si puede determinar la duracin de una accin. Los indicadores de progreso incluyen una etiqueta para indicar la operacin de que se trata y una barra horizontal que se va llenando de izquierda a derecha a medida que progresa la accin. En la barra aparece un porcentaje que indica qu parte de la accin se ha completado.

Prctica recomendada: implementar indicadores de actividad e indicadores de progreso


Indique siempre el progreso cuando la accin tarde ms de 2 segundos en finalizar. Utilice un indicador de progreso siempre que pueda determinar la duracin de una accin. Utilice un indicador de actividad siempre que no pueda determinar la duracin de una accin. Utilice la clase ActivityIndicatorView para crear indicadores de actividad. Utilice la clase ProgressIndicatorView para crear indicadores de progreso. Proporcione informacin de progreso til. Por ejemplo, si los usuarios descargan una aplicacin en su dispositivo, indique el porcentaje de datos que su dispositivo BlackBerry ha descargado. Deber ser tan exacto como le sea posible con la informacin de progreso.

85

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

Permita siempre a los usuarios utilizar la tecla Fin para ocultar un indicador de progreso. Utilice un texto conciso y descriptivo (por ejemplo, "Cargando datos..." o "Creando una lista de aplicaciones..."). Si una accin es larga y desea comunicar lo que sucede en cada fase, proporcione texto que describa cada una de las fases (por ejemplo, "Descargando..." o "Instalando..."). Utilice maysculas para las oraciones. Coloque puntos suspensivos (...) en el texto.

Directrices para el texto

Indicar el progreso de la actividad o de la tarea


Puede utilizar la API Indicador de progreso y de actividad proporcionada en el paquete net.rim.device.api.ui.component.progressindicator para mostrar pistas visuales en una pantalla e indicar que se estn llevando a cabo acciones o que una tarea est en curso. Puede representar una actividad cuya duracin sea desconocida, as como el progreso que puede representarse numricamente (por ejemplo, como un porcentaje de una tarea completada). La API Indicador de progreso y de actividad utiliza el patrn de diseo Model-View-Controller e incluye dos campos encargados de representar la actividad o el progreso: La clase ActivityImageField representa la actividad mediante un mapa de bits que contiene marcos de una animacin. El marco mostrado cambia con el paso del tiempo. Normalmente, el campo muestra una brjula o reloj de arena, o cualquier otra pista visual animada similar. Este campo se crea y configura mediante la clase ActivityIndicatorView. La clase ProgressBarField representa el progreso de una tarea como una barra que se rellena a medida que la tarea se completa. Este campo se crea y configura mediante la clase ProgressIndicatorView.

La aplicacin de ejemplo Demostracin del indicador de progreso se incluye en el BlackBerry Java SDK. Esta aplicacin de ejemplo muestra cmo crear y manipular una variedad de indicadores de actividad y una barra de indicador de progreso.

Indicar actividad
Puede mostrar un campo en su aplicacin de dispositivo BlackBerry que indique que se estn llevando a cabo acciones en el dispositivo. Normalmente, el campo muestra una brjula o reloj de arena, o cualquier otra pista visual animada similar. El campo se implementa mediante la clase ActivityImageField. 1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.system.Bitmap; net.rim.device.api.ui.*; net.rim.device.api.ui.component.progressindicator.*; net.rim.device.api.ui.container.*;

2.

Cree una imagen que contenga marcos de una animacin y inclyala en su proyecto. La imagen debe consistir en una serie de marcos de la animacin distribuidos de forma horizontal. El ancho de la imagen debe coincidir con el ancho de un marco multiplicado por el nmero de marcos. Por ejemplo, la siguiente imagen dispone de cinco marcos de igual tamao.

86

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

3. 4.

Cree un mapa de bits de la imagen.


Bitmap bitmap = Bitmap.getBitmapResource("spinner.png");

Cree un objeto ActivityIndicatorView. Puede especificar un estilo para la vista en el constructor.


ActivityIndicatorView view = new ActivityIndicatorView(Field.USE_ALL_WIDTH);

5.

Para especificar a gestor a utilizar para el diseo y el enfoque, proporcione un segundo argumento cuando cree ActivityIndicatorView. Si no especifica a gestor, se utilizar un objeto VerticalFieldManager. Cree un modelo y un controlador.
ActivityIndicatorModel model = new ActivityIndicatorModel(); ActivityIndicatorController controller = new ActivityIndicatorController();

6.

Conecte la vista, el modelo y el gestor.


view.setController(controller); view.setModel(model); controller.setModel(model); controller.setView(view); model.setController(controller);

7.

Cree el campo que representa la actividad del mapa de bits.


view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER);

8. 9.

En este ejemplo, el mapa de bits consiste en cinco marcos y se muestra centrado en el gestor de vista. Agregue la vista a su pantalla.
add(view);

Controle la indicacin de actividad controlando la vistas del modelo, tal como sea necesario.
MenuItem _stopIndicator = new MenuItem("Stop spinner", 66000, 0) { public void run() { view.getModel().cancel(); } }; MenuItem _resumeIndicator = new MenuItem("Resume spinner", 66010, 0) { public void run() { view.getModel().resume(); } };

Este ejemplo invoca el mtodo cancel() del modelo para detener la animacin. El ejemplo invoca el mtodo resume() del modelo para reanudar la animacin. Cdigo de ejemplo
87

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

public class ActivityIndicatorScreen extends MainScreen { ActivityIndicatorView view = new ActivityIndicatorView(Field.USE_ALL_WIDTH); ActivityIndicatorModel model = new ActivityIndicatorModel(); ActivityIndicatorController controller = new ActivityIndicatorController(); public ActivityIndicatorScreen () { setTitle("Activity Indicator Demo"); view.setController(controller); view.setModel(model); controller.setModel(model); controller.setView(view); model.setController(controller); // Define the indicator image and create a field from it Bitmap bitmap = Bitmap.getBitmapResource("spinner.png"); view.createActivityImageField(bitmap, 5, Field.FIELD_HCENTER); // add the view to the screen add(view); MenuItem _stopIndicator = new MenuItem("Stop spinner", 66000, 0) { public void run() { view.getModel().cancel(); } }; MenuItem _resumeIndicator = new MenuItem("Resume spinner", 66010, 0) { public void run() { view.getModel().resume(); } }; addMenuItem(_stopIndicator); addMenuItem(_resumeIndicator); } }

La aplicacin de muestra Demostracin del indicador de progreso que se incluye en BlackBerry Java SDK crea y manipula una variedad de indicadores de actividad, incluida una brjula que se muestra ms arriba.

Indicar progreso
Puede mostrar un campo en su aplicacin de dispositivo BlackBerry que indique que se estn llevando a cabo tareas en el dispositivo. El progreso se representa mediante una barra que se rellena a medida que la tarea finaliza. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.component.progressindicator.*;

2.

Cree un objeto ProgressIndicatorView. Puede especificar un estilo para la vista en el constructor. En el ejemplo siguiente, no se ha especificado ningn estilo.
ProgressIndicatorView view = new ProgressIndicatorView(0);

88

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

3. 4.

Para especificar a gestor a utilizar para el diseo y el enfoque, proporcione un segundo argumento cuando cree ProgressIndicatorView. Si no especifica un gestor, se utilizar un objeto VerticalFieldManager. Cree un objeto ProgressIndicatorController.
ProgressIndicatorController controller = new ProgressIndicatorController();

Cree un objeto ProgressIndicatorModel. Este objeto representa el progreso de la tarea. Al crear el objeto, puede especificar el valor inicial del modelo, su valor mximo y su valor mnimo. ProgressIndicatorModel utiliza un objeto Adjustment para permitir el acceso encadenado al modelo de datos y para permitir la representacin de la tarea a travs de valores de nmero entero.
ProgressIndicatorModel model = new ProgressIndicatorModel(0, 100, 0);

5.

En este ejemplo, la tarea comienza con el valor 0 y puede alcanzar 100. Estos valores dan forma a la finalizacin de una tarea como un porcentaje. Conecte el controlador, el modelo y la vista.
model.setController(controller); view.setModel(model); view.setController(controller); controller.setModel(model); controller.setView(view);

6.

Cree un subproceso para procesar la tarea. Normalmente, las tareas que requieren indicadores de progreso se realizan utilizando un subproceso. A medida que la tarea progresa, actualice el valor del modelo para que refleje el progreso de la tarea.
class ProgressThread extends Thread { private boolean _paused; private boolean _stop; public void run() { // perform the task here and update the model's value as appropriate } public synchronized void setPaused(boolean paused) { // pause the indicator here } public synchronized void stopThread() { // stop the indicator here } }

7.

Cree una clase que implemente la interfaz ProgressIndicatorListener para ser notificada de los cambios efectuados al modelo de datos. Puede ser notificado cuando el modelo se reinicie, reanude o cancele o cuando el valor del modelo cambie mediante medios no relacionados con la programacin.
private final class DemoProgressIndicatorListener implements ProgressIndicatorListener { public void cancelled() { 89

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

... }

_progressThread.setPaused(true); } public void resumed() { _progressThread.setPaused(false); }

8. 9.

Asocie el servicio de escucha con el modelo.


model.addListener(new DemoProgressIndicatorListener());

Configure la etiqueta para la vista. La etiqueta se muestra sobre los resultados proporcionados ProgressIndicatorField (teniendo en cuenta que el gestor es un VerticalFieldManager y que adems es un gestor predeterminado).
view.setLabel("Percent completion");

10. Cree el campo que representa el progreso. Puede proporcionar los estilos definidos en ProgressBarField para especificar si se debe mostrar texto en la barra y cmo se muestra. De forma predeterminada, el valor del modelo se muestra en el centro del espacio ocupado por la barra.
view.createProgressBar(Field.FIELD_HCENTER);

En este ejemplo, la barra de progreso utiliza el estilo predeterminado de texto y se muestra centrada en el gestor de vista. 11. Agregue la vista a su pantalla.
add(view);

12. Controle la indicacin de progreso prestando ms atencin al modelo de la vista, tal como considere necesario.
MenuItem _pauseIndicator = new MenuItem("Pause indicator", 66010, 0) { public void run() { view.getModel().cancel(); } }; MenuItem _resumeIndicator = new MenuItem("Resume indicator", 66020, 0) { public void run() { view.getModel().resume(); } };

Este ejemplo invoca el mtodo cancel() del modelo para detener la indicacin de progreso. El ejemplo invoca el mtodo resume() del modelo para reanudar la indicacin de progreso. Cdigo de ejemplo

90

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

public class ProgressIndicatorScreen extends MainScreen { ProgressIndicatorView view = new ProgressIndicatorView(0); ProgressIndicatorModel model = new ProgressIndicatorModel(0, 100, 0); ProgressIndicatorController controller = new ProgressIndicatorController(); ProgressThread _progressThread; public ProgressIndicatorScreen() { setTitle("Progress Indicator Screen"); model.setController(controller); model.addListener(new DemoProgressIndicatorListener()); view.setModel(model); view.setController(controller); controller.setModel(model); controller.setView(view); view.setLabel("Percent completion"); view.createProgressBar(Field.FIELD_HCENTER); add(view); MenuItem _startIndicator = new MenuItem("Start indicator", 66000, 0) { public void run() { if(_progressThread != null) { _progressThread.stopThread(); } _progressThread = new ProgressThread(); _progressThread.start(); } }; MenuItem _pauseIndicator = new MenuItem("Pause indicator", 66010, 0) { public void run() { view.getModel().cancel(); } }; MenuItem _resumeIndicator = new MenuItem("Resume indicator", 66020, 0) { public void run() { view.getModel().resume(); } }; addMenuItem(_startIndicator); addMenuItem(_pauseIndicator); addMenuItem(_resumeIndicator); } class ProgressThread extends Thread { private boolean _paused; private boolean _stop; public void run() { // Run dummy operations to simulate the processing of // a collection of data. 91

Gua de desarrollo

Indicadores de actividad e indicadores de progreso

} private final class DemoProgressIndicatorListener implements ProgressIndicatorListener { public void cancelled() { _progressThread.setPaused(true); } public void resumed() { _progressThread.setPaused(false); }

} public synchronized void setPaused(boolean paused) { _paused = paused; this.notify(); } public synchronized void stopThread() { _stop = true; if(_paused) { // If the thread is in a paused state, wake it up this.notify(); } }

for(int i = 0; i <= 100; ++i) { synchronized(this) { if(_stop) { break; } if(_paused) { try { wait(); } catch(InterruptedException ie) { } } } ProgressIndicatorScreen.this.model.setValue(i); try { // Simulate work sleep(250); } catch(InterruptedException ie) { } }

92

Gua de desarrollo

Colectores

public { // } public { // } public { // } public { // }

void reset() Not implemented void setNonProgrammaticValue(int value) Not implemented void configurationChanged(Adjustment source) Not implemented void valueChanged(Adjustment source) Not implemented

La aplicacin de ejemplo Demostracin del indicador de progreso que se incluye en BlackBerry Java SDK crea y manipula una barra de progreso.

Colectores
Puede utilizar colectores para ayudar a los usuarios a seleccionar con facilidad un elemento de una lista. Tipo de colector Archivo Descripcin Este colector permite que los usuarios busquen archivos en los dispositivos BlackBerry.

Ubicacin

Este colector permite que los usuarios seleccionen una ubicacin de una lista que defina. Por ejemplo, puede permitir que los usuarios elijan su ubicacin GPS o una ubicacin seleccionada anteriormente.

93

Gua de desarrollo

Colectores

Tipo de colector

Descripcin

Fecha

Este colector permite que los usuarios seleccionen un da, mes o ao especficos. Por ejemplo, puede permitir que los usuarios seleccionen un mes y ao para especificar la fecha de caducidad de su tarjeta de crdito.

Hora

Este colector permite que los usuarios seleccionen una hora, minuto o segundo especficos.

94

Gua de desarrollo

Colectores

Tipo de colector

Descripcin

Prctica recomendada: implementar colectores


Utilice las clases FilePicker, LocationPicker y DateTimePicker para crear colectores.

Directrices para los colectores de archivos


Especifique una vista especfica para mostrar los tipos de archivos que coinciden con el objetivo del usuario. Por ejemplo, si un usuario navega entre las distintas imgenes, muestre las imgenes en el colector de archivos. Permita a los usuarios, si es posible, iniciar la navegacin desde una carpeta predeterminada.

Crear un colector de fechas


1. Importe las clases y las interfaces necesarias.
import import import import import net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.picker.*; java.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor, invoque pushScreen() para mostrar la pantalla personalizada de la aplicacin. La clase DatePickScreen representa la pantalla personalizada que se describe en el paso 3.
public class DatePick extends UiApplication { public static void main(String[] args) { DatePick theApp = new DatePick(); theApp.enterEventDispatcher(); } public DatePick() {

95

Gua de desarrollo

Colectores

pushScreen(new DatePickScreen());

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor, invoque setTitle() para mostrar un ttulo en la pantalla. Invoque add() para mostrar un campo de texto enriquecido en la pantalla.
class DatePickScreen extends MainScreen { public DatePickScreen() { setTitle("Date Picker Sample"); add(new RichTextField("Trying Date Picker")); } }

4.

Agregue una seccin de cdigo a la cola de eventos de la aplicacin invocando invokeLater(). Cree un objeto Runnable y pselo como parmetro a invokeLater(). Omita run() en la definicin de Runnable.
class DatePickScreen extends MainScreen { public DatePickScreen() { setTitle("Date Picker Sample"); add(new RichTextField("Trying Date Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { } }); } }

5.

En run(), invoque DateTimePicker.getInstance() para devolver un objeto DateTimePicker. Invoque doModal() para mostrar el colector de fechas. Invoque getDateTime() para devolver un objeto Calendar que represente la fecha y la hora que selecciona el usuario. Utilice getTime() para devolver la fecha y la hora como un objeto Date. Utilice Dialog.alert() para mostrar la fecha y la hora seleccionadas.
class DatePickScreen extends MainScreen { public DatePickScreen() { setTitle("Date Picker Sample"); add(new RichTextField("Trying Date Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { DateTimePicker datePicker = DateTimePicker.getInstance(); datePicker.doModal(); Calendar cal = datePicker.getDateTime(); Date date = cal.getTime(); Dialog.alert("You selected " + date.toString());

96

Gua de desarrollo

Colectores

});

Ejemplo de cdigo: crear un colector de fechas


import net.rim.device.api.ui.*; import net.rim.device.api.ui.picker.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.database.*; import net.rim.device.api.io.*; import java.util.*; public class DatePick extends UiApplication { public static void main(String[] args) { DatePick theApp = new DatePick(); theApp.enterEventDispatcher(); } public DatePick() { pushScreen(new DatePickScreen()); } } class DatePickScreen extends MainScreen { public DatePickScreen() { setTitle("Date Picker Sample"); add(new RichTextField("Trying Date Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { DateTimePicker datePicker = DateTimePicker.getInstance(); datePicker.doModal(); Calendar cal = datePicker.getDateTime(); Date date = cal.getTime(); Dialog.alert("You selected " + date.toString()); } }); } }

Crear un colector de archivos


1. Importe las clases y las interfaces necesarias.

97

Gua de desarrollo

Colectores

import import import import import

net.rim.device.api.ui.*; net.rim.device.api.ui.picker.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; java.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase FilePickScreen representa la pantalla personalizada que se describe en el paso 3.
public class FilePick extends UiApplication { public static void main(String[] args) { FilePick theApp = new FilePick(); theApp.enterEventDispatcher(); } public FilePick() { pushScreen(new FilePickScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla. Invoque add() para agregar un campo de etiqueta a la pantalla.
class FilePickScreen extends MainScreen { public FilePickScreen() { setTitle("File Picker Sample"); add(new LabelField("Trying File Picker")); } }

4.

En el constructor de pantalla, invoque invokeLater() para agregar una seccin de cdigo a la cola de eventos de la aplicacin. Cree un objeto Runnable y pselo como parmetro a invokeLater().
class FilePickScreen extends MainScreen { public FilePickScreen() { setTitle("File Picker Sample"); add(new LabelField("Trying File Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { } }); } }

98

Gua de desarrollo

Colectores

5.

Omita run() en la definicin de Runnable. En run(), invoque FilePicker.getInstance() para devolver un objeto FilePicker. Cree un objeto FilePickListener, descrito en el paso 6. Invoque setListener () para registrar el oyente para el colector de archivos. Invoque show() para mostrar el colector de archivos en la pantalla.
class FilePickScreen extends MainScreen { public FilePickScreen() { setTitle("File Picker Sample"); add(new LabelField("Trying File Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { FilePicker fp = FilePicker.getInstance(); FilePickListener fileListener = new FilePickListener(); fp.setListener(fileListener); fp.show(); } }); } }

6.

Invoque Dialog.alert para crear un cuadro de dilogo con un mensaje que muestre qu archivo se ha seleccionado. InvoqueDialog.alert en una clase que implemente la interfaz FilePicker.Listener omitiendo selectionDone(). La aplicacin llamar a selectionDone() cuando el usuario seleccione un archivo utilizando el colector de archivos.
class FilePickListener implements FilePicker.Listener { public void selectionDone(String str) { Dialog.alert("You selected " + str); } }

Ejemplo de cdigo: crear un colector de archivos


import net.rim.device.api.ui.*; import net.rim.device.api.ui.picker.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.io.*; public class FilePick extends UiApplication { public static void main(String[] args) { FilePick theApp = new FilePick(); theApp.enterEventDispatcher(); } public FilePick() 99

Gua de desarrollo

Buscar

{ }

pushScreen(new FilePickScreen());

} class FilePickScreen extends MainScreen { public FilePickScreen() { setTitle("File Picker Sample"); add(new LabelField("Trying File Picker")); UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { FilePicker fp = FilePicker.getInstance(); FilePickListener fileListener = new FilePickListener(); fp.setListener(fileListener); fp.show(); } }); } } class FilePickListener implements FilePicker.Listener { public void selectionDone(String str) { Dialog.alert("You selected " + str); } }

Buscar
Los usuarios pueden utilizar el campo de bsqueda en la pantalla de inicio para buscar elementos en cualquier aplicacin del dispositivo, incluidas aplicaciones de terceros. La bsqueda tambin puede incluir contenido que no est almacenado en el dispositivo, por ejemplo, la base de datos de una empresa o un sitio Web.

100

Gua de desarrollo

Buscar

Los usuarios tambin pueden utilizar un campo de bsqueda en una aplicacin para buscar elementos en dicha aplicacin. Por ejemplo, los usuarios pueden buscar un mensaje de correo electrnico en una lista de mensajes, una cancin en la aplicacin Multimedia o un contacto en la lista de contactos. En algunas ocasiones, es posible que desee mostrar los resultados de bsqueda de otras aplicaciones. En algunas aplicaciones, el campo de bsqueda aparece en la pantalla. En el resto de casos, la bsqueda est disponible desde el men completo, el men emergente o la barra de herramientas. Cuando los usuarios escriben texto en un campo de bsqueda, muestre los resultados de la bsqueda. En el caso de devolver una gran cantidad de resultados, puede permitir a los usuarios para delimitar la bsqueda a un campo o a un grupo de campos. Por ejemplo, si los usuarios buscan la lista de mensajes, pueden utilizar la lista desplegable a la derecha del campo de bsqueda para delimitar su bsqueda al campo Para o al campo Asunto. Para obtener ms informacin acerca de la adicin de un campo de bsqueda a su aplicacin, consulte la Gua de desarrollo de integracin de BlackBerryJava Application.

Los usuarios pueden llevar a cabo las acciones siguientes en un campo de bsqueda: Slo dispositivos BlackBerry con panel tctil Pulse la tecla Intro. Hacer clic en el panel tctil. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Tocar la pantalla. Pulse la tecla Intro. Hacer clic en el panel tctil. Tocar y mantener pulsado un resultado de bsqueda en la pantalla. Hacer clic y mantener pulsado el panel tctil.

Accin Abrir un elemento seleccionado en los resultados de bsqueda. Mostrar un men emergente con acciones para un resultado de bsqueda (por ejemplo, llamar a un contacto).

Hacer clic y mantener pulsado el panel tctil.

Puede registrar contenido en su aplicacin para que pueda ser incluida en los resultados de bsqueda. Tambin puede registrar su aplicacin como mtodo para los usuarios con el fin de ampliar la bsqueda. Por ejemplo, si los usuarios buscan una cancin en la aplicacin Multimedia y no encuentran la cancin, puede permitir a los usuarios

101

Gua de desarrollo

Buscar

buscar su aplicacin como una fuente alternativa de resultados de bsqueda. Para obtener ms informacin acerca del registro de contenido o una aplicacin, consulte la Gua de desarrollo de integracin de BlackBerry Java Application.

Prctica recomendada: implementar bsquedas


Utilice el paquete net.rim.device.api.unifiedsearch para implementar las capacidades de bsqueda. Sea selectivo con el contenido que registra para que se incluye en los resultados de bsqueda. Registre slo el contenido que proporcione resultados de bsqueda adecuados para los usuarios. Intente presentar los elementos ms relevantes al principio de la lista de resultados de bsqueda. Por ejemplo, si los usuarios buscan un restaurante que tiene distintas ubicaciones, muestre el restaurante que se encuentre ms cercano a la ubicacin del usuario al principio de la lista de resultados de bsqueda. En los resultados de bsqueda, coloque en negrita el texto que coincida con el texto que escriben los usuarios. Este enfoque ayuda a los usuarios a comprender por qu aparece cada elemento en la lista de resultados de bsqueda. Si los usuarios necesitan buscar una palabra en una pantalla (por ejemplo, en un mensaje o en una pgina Web), utilice el trmino "Buscar" en el Men. Configure el punto focal predeterminado para el campo de bsqueda. Una vez aparezcan los resultados de bsqueda, configure el enfoque predeterminado segn el primer elemento de la lista de resultados de bsqueda. Utilice el trmino "Buscar" como texto de sugerencia en el campo de bsqueda. Los campos de bsqueda no podrn distinguir entre maysculas y minsculas. Coloque el campo de bsqueda debajo de la barra de ttulo en la pantalla de la aplicacin. No asigne teclas de atajo a una pantalla que incluya un campo de bsqueda. Si quiere utilizar teclas como atajo, proporcione funciones de bsqueda alternativa. Por ejemplo, permita a los usuarios buscar mensajes en una lista de mensajes utilizando el men.

Implementacin de los campos de bsqueda


Crear un campo de bsqueda


Puede crear una aplicacin que utilice la clase KeywordFilterField, incluida en el paquete net.rim.device.api.ui.component, para proporcionar un campo de interfaz de usuario que consista en un campo de escritura nico y una lista de elementos seleccionables. A medida que los usuarios escriben texto en un campo de bsqueda, la aplicacin filtra los elementos de la lista que comienzan con el texto de bsqueda. Para obtener ms informacin acerca del uso de la clase KeywordFilterField, consulte la aplicacin de ejemplo Campo del filtro de palabra clave, incluida en BlackBerry Java Development Environment versin 4.3.1 o posterior. 1. Importe las clases y las interfaces necesarias.
import import import import import import import net.rim.device.api.collection.util.SortedReadableList; net.rim.device.api.io.LineReader; net.rim.device.api.ui.component.KeywordFilterField; net.rim.device.api.ui.component.KeywordProvider; java.io.InputStream; java.lang.String; java.util.Vector;

102

Gua de desarrollo

Buscar

2.

Cree variables. En el siguiente cdigo de ejemplo, CountryList ampla la clase SortedReadableList e implementa la interfaz KeywordProvider.
private KeywordFilterField _keywordField; private CountryList _CountryList; private Vector _countries;

3.

Para crear una lista de elementos de texto seleccionables, rellene el objeto Vector con datos de un archivo de texto.
_countries = getDataFromFile();

4.

Cree una instancia de una clase que ample la clase SortedReadableList.


_CountryList = new CountryList(StringComparator.getInstance(true),_countries);

5. 6. 7. 8.

Para especificar los elementos de la lista, cree una instancia nueva de un objeto KeywordFilterField.
_keywordField = new KeywordFilterField();

Invoque KeywordFilterField.setList().
_keywordField.setList(_CountryList, _CountryList);

Configure una etiqueta para el campo de entrada de KeywordFilterFIeld.


_keywordField.setLabel("Search: ");

Cree la pantalla principal de la aplicacin y agregue un valor KeywordFilterField a la pantalla principal.


KeywordFilterDemoScreen screen = new KeywordFilterDemoScreen(this,_keywordField); screen.add(_keywordField.getKeywordField()); screen.add(_keywordField); pushScreen(screen);

9.

Para crear un mtodo que rellene y devuelva un objeto Vector de los objetos Country que contienen los datos del archivo de texto, en la firma del mtodo, especifique Vector como el de tipo que se ha de devolver.
public Vector getDataFromFile()

10. Cree y almacene una referencia a un objeto Vector nuevo.


Vector countries = new Vector();

11. Cree un flujo de entrada al archivo de texto.


InputStream stream = getClass().getResourceAsStream("/Data/CountryData.txt");

12. Lea las lneas delimitadas CRLF del flujo de entrada.


LineReader lineReader = new LineReader(stream);

13. Lea los datos de la lnea uno del flujo de entrada a la vez hasta alcanzar el final del indicador. Cada una de las lneas se analiza para extraer los datos que se utilizan para construir objetos Country.

103

Gua de desarrollo

Buscar

for(;;){ //Obtain a line of text from the text file String line = new String(lineReader.readLine()); //If we are not at the end of the file, parse the line of text if(!line.equals("EOF")) { int space1 = line.indexOf(" "); String country = line.substring(0,space1); int space2 = line.indexOf(" ",space1+1); String population = line.substring(space1+1,space2); String capital = line.substring(space2+1,line.length()); // Create a new Country object countries.addElement(new Country(country,population,capital)); } else { break; } } // end the for loop return countries;

14. Para agregar una palabra clave a la lista de elementos te texto seleccionables, invoque SortedReadableList.doAdd(element).
SortedReadableList.doAdd(((Country)countries.elementAt(i)) .getCountryName()) ;

15. Para actualizar la lista de elementos de texto seleccionables, invoque KeywordFilterField.updateList().


_keywordField.updateList();

16. Para obtener la palabra clave que el usuario del dispositivo BlackBerry ha escrito en KeywordFilterField, invoque KeywordFilterField.getKeyword().
String userTypedWord = _keywordField.getKeyword();

Campos de texto con la funcin Autocompletar


Puede utilizar la funcin Autocompletar del campo de texto para predecir lo que un usuario de dispositivo BlackBerry desea escribir y para mostrar una palabra o frase antes de que el usuario la escriba por completo. Al crear un objeto AutoCompleteField, debe asociar un objeto BasicFilteredList con el mismo. El valor BasicFilteredList mantiene referencias a los objetos de datos con los que se compara para crear la lista de

palabras y oraciones. Puede configurar los campos de los objetos de datos con los que se compara y qu campos se muestran cuando se encuentra una coincidencia. Por ejemplo, puede comparar el texto que escribe el usuario con el valor del campo DATA_FIELD_CONTACTS_BIRTHDAY en la fuente de datos DATA_SOURCE_CONTACTS y devolver el valor del campo DATA_FIELD_CONTACTS_NAME_FULL correspondiente. Hay cuatro tipos de datos que usted puede vincular a BasicFilteredList para utilizarlos con un valor AutoCompleteField. Puede especificar el conjunto de cadenas con las que comparar de una de las maneras siguientes:
104

una matriz de cadenas literales

Gua de desarrollo

Buscar

una matriz de objetos que sean compatibles con toString() fuentes de datos en un dispositivo BlackBerry, como contactos, notas, tareas y varios tipos de archivos multimedia una matriz de objetos y una matriz de cadenas con sus correspondientes ndices

De forma predeterminada, la funcin Autocompletar del campo de texto muestra el conjunto de cadenas devueltas por el proceso de comparacin en una lista desplegable. Puede configurar la apariencia de esta lista especificando indicadores de estilo al crear las opciones para autocompletar campos de texto. Puede cambiar la apariencia de la lista y cmo los usuarios pueden interactuar con la lista.

Crear un campo de texto con la funcin Autocompletar desde un conjunto de datos


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.ui.UiApplication; net.rim.device.api.ui.container.MainScreen; net.rim.device.api.ui.component.AutoCompleteField; net.rim.device.api.collection.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor, invoque pushScreen() para mostrar la pantalla personalizada de la aplicacin. La clase HomeScreen, descrita en el paso 3, representa la pantalla personalizada.
public class AutoCompleteFieldApp extends UiApplication { public static void main(String[] args) { AutoCompleteFieldApp app = new AutoCompleteFieldApp(); app.enterEventDispatcher(); } AutoCompleteFieldApp() { pushScreen(new HomeScreen()); } }

3.

Cree la pantalla personalizada ampliando la clase MainScreen.


class HomeScreen extends MainScreen { public HomeScreen() { } }

4.

En el constructor, cree un objeto BasicFilteredList. Cree una matriz String y almacene las cadenas que desea hacer coincidir en la matriz. En este ejemplo, las cadenas son los das de la semana. Invoque addDataSet () para enlazar los datos de la matriz a BasicFilteredList.

105

Gua de desarrollo

Buscar

BasicFilteredList filterList = new BasicFilteredList(); String[] days = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sund ay"}; filterList.addDataSet(1,days,"days",BasicFilteredList.COMPARISON_IGNORE_CASE);

5.

En el constructor, cree un objeto AutoCompleteField. Pase una instancia de BasicFilteredList al constructor de AutoCompleteField para enlazar BasicFilteredList al campo de texto con la funcin Autocompletar. Invoque add() para agregar el campo a la pantalla.
AutoCompleteField autoCompleteField = new AutoCompleteField(filterList); add(autoCompleteField);

Ejemplo de cdigo: crear un campo con la funcin Autocompletar desde un conjunto de datos
import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.component.AutoCompleteField; import net.rim.device.api.collection.util.*; public class AutoCompleteFieldApp extends UiApplication { public static void main(String[] args) { AutoCompleteFieldApp app = new AutoCompleteFieldApp(); app.enterEventDispatcher(); } AutoCompleteFieldApp() { HomeScreen scr = new HomeScreen(); this.pushScreen(scr); } } class HomeScreen extends MainScreen { public HomeScreen() { BasicFilteredList filterList = new BasicFilteredList(); String[] days = {"Monday","Tuesday","Wednesday", "Thursday","Friday","Saturday","Sunday"}; filterList.addDataSet(1,days,"days",BasicFilteredList .COMPARISON_IGNORE_CASE); AutoCompleteField autoCompleteField = new AutoCompleteField(filterList); add(autoCompleteField); } }

Crear un campo de texto con la funcin Autocompletar desde una fuente de datos
1. Importe las clases y las interfaces necesarias.

106

Gua de desarrollo

Buscar

import import import import

net.rim.device.api.ui.UiApplication; net.rim.device.api.ui.container.MainScreen; net.rim.device.api.ui.component.AutoCompleteField; net.rim.device.api.collection.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase HomeScreen representa la pantalla personalizada que se describe en el paso 3.
public class AutoCompleteFieldApp extends UiApplication { public static void main(String[] args) { AutoCompleteFieldApp app = new AutoCompleteFieldApp(); app.enterEventDispatcher(); } public AutoCompleteFieldApp() { pushScreen(new HomeScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen.


class HomeScreen extends MainScreen { public HomeScreen() { } }

4.

En el constructor de pantalla, cree un objeto de BasicFilteredList. Invoque addDataSource() para vincular una fuente de datos a BasicFilteredList. En este ejemplo, los datos son la informacin de contacto y la fuente de datos es la lista de contactos. El primer argumento que debe pasar a addDataSource() es un ID nico. El segundo argumento vincula el objeto BasicFilteredList a una fuente de datos. El tercer argumento especifica el conjunto de campos de fuentes de datos con los que realizar la comparacin. El cuarto argumento especifica el conjunto de campos de fuentes de datos que deben estar disponibles cuando se detecta una coincidencia. En este ejemplo, los campos con los que realizar la comparacin son los mismos que los campos que han de estar disponibles cuando se detecta una coincidencia. El quinto argumento especifica el campo de visualizacin principal. El sexto argumento especifica el campo de visualizacin secundario, ste puede configurarse en -1 si no desea utilizarlo. El argumento final especifica un nombre para BasicFilteredList; su valor se genera automticamente si especifica null.
BasicFilteredList filterList = new BasicFilteredList(); filterList.addDataSource( 1, BasicFilteredList.DATA_SOURCE_CONTACTS, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY | BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY |

107

Gua de desarrollo

Buscar

BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL, -1, null);

5.

En el constructor de la pantalla, cree un objeto AutoCompleteField. Pase el objeto BasicFilteredList que ha creado en el paso 4 al constructor AutoCompleteField para vincular BasicFilteredList al campo de texto con la funcin Autocompletar. Invoque add() para agregar el campo a la pantalla.
AutoCompleteField autoCompleteField = new AutoCompleteField(filterList); add(autoCompleteField);

Ejemplo de cdigo: crear un campo con la funcin Autocompletar desde una fuente de datos
import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.component.AutoCompleteField; import net.rim.device.api.collection.util.*; public class AutoCompleteFieldApp extends UiApplication { public static void main(String[] args) { AutoCompleteFieldApp app = new AutoCompleteFieldApp(); app.enterEventDispatcher(); } AutoCompleteFieldApp() { HomeScreen scr = new HomeScreen(); this.pushScreen(scr); } } class HomeScreen extends MainScreen { public HomeScreen() { BasicFilteredList filterList = new BasicFilteredList(); filterList.addDataSource(1, BasicFilteredList.DATA_SOURCE_CONTACTS, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY | BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL | BasicFilteredList.DATA_FIELD_CONTACTS_COMPANY | BasicFilteredList.DATA_FIELD_CONTACTS_EMAIL, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL, BasicFilteredList.DATA_FIELD_CONTACTS_NAME_FULL, null); AutoCompleteField autoCompleteField = new AutoCompleteField(filterList); add(autoCompleteField); } }

108

Gua de desarrollo

Buscar

Utilizar fuentes de datos y campos con un campo de texto con la funcin Autocompletar
Puede utilizar la clase AutoCompleteField y la clase BasicFilteredList para comparar el texto que escribe un usuario en un campo de texto con la funcin Autocompletar con los valores de campos en una fuente de datos especificada. Debe especificar los campos a utilizar y sus fuentes de datos utilizando un objeto BasicFilteredList que pasar como un argumento al constructor de la clase AutoCompleteField AutoCompleteField. Fuente de datos DATA_SOURCE_APPOINTMENTS Campos DATA_FIELD_APPOINTMENTS_ALL DATA_FIELD_APPOINTMENTS_ATTENDEES DATA_FIELD_APPOINTMENTS_ORGANIZER DATA_FIELD_APPOINTMENTS_SUBJECT DATA_FIELD_CONTACTS_ADDRESS_ALL DATA_FIELD_CONTACTS_ADDRESS_HOME DATA_FIELD_CONTACTS_ADDRESS_WORK DATA_FIELD_CONTACTS_ANNIVERSARY DATA_FIELD_CONTACTS_BIRTHDAY DATA_FIELD_CONTACTS_CATEGORIES DATA_FIELD_CONTACTS_COMPANY DATA_FIELD_CONTACTS_EMAIL DATA_FIELD_CONTACTS_FAX DATA_FIELD_CONTACTS_JOB_TITLE DATA_FIELD_CONTACTS_NAME_FULL DATA_FIELD_CONTACTS_NAME_FIRST DATA_FIELD_CONTACTS_NAME_LAST DATA_FIELD_CONTACTS_NOTES DATA_FIELD_CONTACTS_PAGER DATA_FIELD_CONTACTS_PHONE_ALL DATA_FIELD_CONTACTS_PHONE_HOME DATA_FIELD_CONTACTS_PHONE_HOME2 DATA_FIELD_CONTACTS_PHONE_MOBILE DATA_FIELD_CONTACTS_PHONE_OTHER DATA_FIELD_CONTACTS_PHONE_WORK DATA_FIELD_CONTACTS_PHONE_WORK2 DATA_FIELD_CONTACTS_PIN DATA_FIELD_MEMOS_TITLE DATA_FIELD_MESSAGES_ALL DATA_FIELD_MESSAGES_RECIPIENT

DATA_SOURCE_CONTACTS

DATA_SOURCE_MEMOS DATA_SOURCE_MESSAGES

109

Gua de desarrollo

Casillas de seleccin numrica

Fuente de datos

Campos DATA_FIELD_MESSAGES_SENDER DATA_FIELD_MESSAGES_SUBJECT DATA_FIELD_MUSIC_ALL DATA_FIELD_MUSIC_ALBUM DATA_FIELD_MUSIC_ARTIST DATA_FIELD_MUSIC_GENRE DATA_FIELD_MUSIC_PLAYLIST DATA_FIELD_MUSIC_SONG DATA_FIELD_PICTURES_TITLE DATA_FIELD_RINGTONES_TITLE DATA_FIELD_TASKS_TITLE DATA_FIELD_VIDEOS_TITLE DATA_FIELD_VOICENOTES_TITLE

DATA_SOURCE_MUSIC

DATA_SOURCE_PICTURES DATA_SOURCE_RINGTONES DATA_SOURCE_TASKS DATA_SOURCE_VIDEOS DATA_SOURCE_VOICENOTES

Casillas de seleccin numrica


Utilice una casilla de seleccin numrica para permitir a los usuarios seleccionar fcilmente un elemento de una lista ordenada. Por ejemplo, utilice las casillas de seleccin numrica para permitir que los usuarios puedan encontrar un nmero o cambiar el da de la semana. Slo dispositivos BlackBerry con panel tctil Desplazar un dedo verticalmente en el panel tctil. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Arrastrar un dedo verticalmente en la pantalla. Deslizar hacia arriba o hacia abajo en la pantalla. Desplazar un dedo verticalmente en el panel tctil.

Accin Buscar un elemento en la lista.

Seleccionar un elemento de la lista. Moverse a otra casilla de seleccin numrica.

Hacer clic en el panel tctil. Desplazar un dedo verticalmente en el panel tctil.

Desplazar un dedo hacia arriba o hacia abajo en la pantalla o en el panel tctil. Elevar un dedo desde la pantalla. Hacer clic en el panel tctil. Arrastrar un dedo verticalmente en la pantalla. Desplazar un dedo verticalmente en el panel tctil.

110

Gua de desarrollo

Casillas de seleccin numrica

Crear una casilla de seleccin numrica


1. Importe las clases y las interfaces necesarias.
import import import import import net.rim.device.api.ui.UiApplication; net.rim.device.api.ui.component.Dialog; net.rim.device.api.ui.component.TextSpinBoxField; net.rim.device.api.ui.container.MainScreen; net.rim.device.api.ui.container.SpinBoxFieldManager;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase HomeScreen representa la pantalla personalizada que se describe en el paso 3.
public class SpinBoxApp extends UiApplication { public static void main(String[] args) { SpinBoxApp app = new SpinBoxApp(); app.enterEventDispatcher(); } public SpinBoxApp() { pushScreen(new HomeScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. Declare una variable para cada campo en la casilla de seleccin numrica y declare una variable para el gestor de campo de la casilla de seleccin numrica.
class HomeScreen extends MainScreen { TextSpinBoxField spinBoxDays; TextSpinBoxField spinBoxMonths; SpinBoxFieldManager spinBoxMgr; public HomeScreen() 111

Gua de desarrollo

Casillas de seleccin numrica

{ }

4.

En el constructor de la pantalla, cree una matriz de objetos String para cada uno de los campos de la casilla de seleccin numrica.
final String[] DAYS = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; final String[] MONTHS = {"January","February","March","April","May","June","July","A ugust","September","October","November","December"};

5.

En el constructor de pantalla, cree instancias nuevas del gestor de campo de la casilla de seleccin numrica y los dos campos de la casilla de seleccin numrica. Pase la matriz apropiada de Strings como argumentos a cada uno de los constructores del campo de la casilla de seleccin numrica.
spinBoxMgr = new SpinBoxFieldManager(); spinBoxDays = new TextSpinBoxField(DAYS); spinBoxMonths = new TextSpinBoxField(MONTHS);

6.

En el constructor de pantalla, agregue los campos de la casilla de seleccin numrica al gestor del campo de dicha casilla. Invoque add() para agregar el gestor y los campos que contiene a la pantalla.
spinBoxMgr.add(spinBoxDays); spinBoxMgr.add(spinBoxMonths); add(spinBoxMgr);

Ejemplo de cdigo: crear una casilla de seleccin numrica


import net.rim.device.api.ui.UiApplication; import net.rim.device.api.ui.container.MainScreen; import net.rim.device.api.ui.container.SpinBoxFieldManager; import net.rim.device.api.ui.component.Dialog; import net.rim.device.api.ui.component.TextSpinBoxField; public class SpinBoxApp extends UiApplication { public static void main(String[] args) { SpinBoxApp app = new SpinBoxApp(); app.enterEventDispatcher(); } public SpinBoxApp() { HomeScreen homeScreen = new HomeScreen(); pushScreen(homeScreen); } } class HomeScreen extends MainScreen { TextSpinBoxField spinBoxDays; TextSpinBoxField spinBoxMonths; SpinBoxFieldManager spinBoxMgr; public HomeScreen() {

112

Gua de desarrollo

Campos de texto

} public void close() { Dialog.alert("You selected " + (String)spinBoxDays.get(spinBoxDays.getSelectedIndex()) + " and " + (String)spinBoxMonths.get(spinBoxMonths.getSelectedIndex())); super.close(); }

final String[] DAYS = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; final String[] MONTHS = {"January","February","March","April","May","June","July","August","Sep tember","October","November","December"}; spinBoxMgr = new SpinBoxFieldManager(); spinBoxDays = new TextSpinBoxField(DAYS); spinBoxMonths = new TextSpinBoxField(MONTHS); spinBoxMgr.add(spinBoxDays); spinBoxMgr.add(spinBoxMonths); add(spinBoxMgr);

Prctica recomendada: implementar casillas de seleccin numrica


Utilice casillas de seleccin numrica para una lista de elementos secuenciales. Utilice listas desplegables para elementos no secuenciales o elementos con intervalos irregulares. Para obtener una lista corta de elementos no secuenciales, puede utilizar una casilla de seleccin numrica para proporcionar una experiencia ms interactiva para los usuarios. Evite utilizar una casilla de seleccin numrica si el resto de componentes aparecen en la pantalla. Utilice la clase SpinBoxField y la clase SpinBoxFieldManager para crear casillas de seleccin numrica. Agregue casillas de seleccin numrica a los cuadros de dilogo en lugar de a las pantallas siempre que sea posible. Cuando los usuarios seleccionan una casilla de seleccin numrica, sta muestra de tres a cinco elementos verticalmente. Utilice un patrn identificable para la secuencia de elementos (por ejemplo, 5, 10, 15) para que los usuarios puedan estimar cunto tendrn que desplazarse para encontrar el elemento de destino. Deber evitar que los usuarios se desplacen horizontalmente para ver varias casillas de seleccin numrica. Si es necesario, separe las casilla de seleccin numrica en varios campos. Si el texto de la casilla de seleccin numrica es demasiado largo, utilice puntos suspensivos (...).

Campos de texto
Los usuarios pueden utilizar un campo de texto para escribir texto.

113

Gua de desarrollo

Campos de texto

Tipo de campo de texto correo electrnico fecha y hora

Descripcin Los usuarios pueden insertar un smbolo de arroba (@) o un punto (.) en el campo de direccin de un correo electrnico pulsando la tecla Espacio. Los usuarios pueden cambiar la fecha o la hora en los dispositivosBlackBerry con un panel tctil mediante el teclado o desplazando un dedo verticalmente en el panel tctil. Los usuarios pueden cambiar la fecha o la hora en los dispositivos BlackBerry con una pantalla tctil desplazndose hacia arriba o hacia abajo en la pantalla. Si los usuarios necesitan escribir en un campo de nmero con un teclado fsico, el dispositivo BlackBerry cambia al modo de bloqueo de nmeros para que los usuarios no tengan que pulsar la tecla Alt para escribir nmeros. Si los usuarios necesitan escribir en un campo de nmero con un teclado virtual, aparecer el teclado de nmeros. Cuando los usuarios escriben en un campo de contrasea, aparece un asterisco (*) en lugar de texto. Los usuarios no pueden cortar, copiar ni pegar texto o utilizar Texto automtico en los campos de contraseas. En dispositivos BlackBerry con tecnologa SureType, la pulsaciones mltiples constituyen el mtodo predeterminado de escritura en campos de contraseas. Si los usuarios escriben en un campo de nmero de telfono con un teclado fsico, el dispositivo BlackBerry cambia al modo de bloqueo de nmeros para que los usuarios no tengan que pulsar la tecla Alt para escribir nmeros. Puede permitir tambin a los usuarios realizar las acciones siguientes en los campos de nmero de telfono: Escribir el signo ms (+) para nmeros de telfono internacionales. Escribir caracteres de formato, como el signo menos (-), punto (.), parntesis (()) y espacios. Escribir el signo almohadilla (#) o asterisco (*). Indicar una pausa escribiendo una coma (,) o indique un tono de espera escribiendo un signo de exclamacin (!). Indicar una extensin pulsando la tecla Alt y E, X o T.

nmero

contrasea

nmero de telfono

Si los usuarios necesitan escribir en un campo de nmero de telfono con un teclado virtual, aparecer el teclado de nmeros. Puede permitir tambin a los usuarios realizar las acciones siguientes en los campos de nmero de telfono: Escribir el signo almohadilla (#) o asterisco (*). Indicar una pausa o una extensin manteniendo pulsada la tecla asterisco (*). Indicar un tono de espera o una extensin manteniendo pulsada la tecla signo almohadilla (#).

114

Gua de desarrollo

Campos de texto

Tipo de campo de texto texto

Descripcin Los usuarios escriben texto en los campos de texto. Los usuarios pueden cortar, copiar y pegar texto en los campos de texto. Cuando el cursor alcanza el final de una lnea de texto, el texto se ajusta a la lnea siguiente. En los campos de texto, los dispositivos BlackBerry tambin pueden convertir los nmeros telefnicos, las pginas Web y las direcciones de correo electrnico en vnculos automticamente. Los usuarios pueden insertar un punto (.) en un campo de direccin pulsando la tecla Espacio.

direccin Web

Prctica recomendada: implementar campos de texto


Utilice la clase TextField para crear campos de texto. Escoja un tipo de campo de texto basado en lo que espera que escriban los usuarios. La utilizacin del campo de texto ms apropiado es importante para que el indicador de escritura adecuado aparezca en la pantalla cuando los usuarios escriben texto. Por ejemplo, cuando los usuarios escriben texto en un campo de nmero de telfono, el indicador de bloqueo numrico aparece en la esquina superior derecha de la pantalla. El campo que elija tambin afectar al mtodo de escritura predeterminado del campo en los dispositivos BlackBerry con tecnologa SureType. Utilice o ample los campos existentes en lugar de crear campos personalizados donde sea posible para que los campos hereden el comportamiento predeterminado apropiado. Si es necesario, incluya texto de sugerencia para proporcionar instrucciones a los usuarios. Utilice texto de sugerencia slo cuando el espacio de la pantalla sea limitado y no pueda incluir una etiqueta ni texto de instrucciones. El texto de sugerencia aparece en el campo y desaparece cuando los usuarios escriben. Utilice etiquetas concisas y descriptivas. Evite etiquetas que se ajusten directamente. Utilice maysculas para los ttulos. Punte las etiquetas de los campos con dos puntos (:). Si utiliza texto de sugerencia, ste deber ser muy breve. Utilice maysculas para las oraciones.

Directrices para las etiquetas


Crear un campo de texto


Crear un campo de texto de slo lectura que permita dar formato
1. 2. Importe la clase net.rim.device.api.ui.component.RichTextField. Cree una instancia de RichTextField.
RichTextField rich = new RichTextField("RichTextField");

Crear un campo de texto editable que no tenga formato y que acepte filtros
1. Importe las siguientes clases:
115

Gua de desarrollo

Campos de texto

2.

net.rim.device.api.ui.component.BasicEditField net.rim.device.api.ui.component.EditField

Cree una instancia de BasicEditField.


BasicEditField bf = new BasicEditField("BasicEditField: ", "", 10, EditField.FILTER_UPPERCASE);

Crear un campo de texto editable que admita caracteres especiales


1. 2. Importe la clase net.rim.device.api.ui.component.EditField. Cree una instancia de EditField.
EditField edit = new EditField("EditField: ", "", 10, EditField.FILTER_DEFAULT);

Crear un campo de texto para Texto automtico


Si un campo de texto es compatible con Texto automtico, cuando los usuarios pulsan la tecla Espacio dos veces, el dispositivo BlackBerry inserta un punto, pone en mayscula la letra siguiente tras un punto y sustituye palabras tal como se define en la aplicacin Texto automtico. 1. Importe las siguientes clases: net.rim.device.api.ui.component.AutoTextEditField net.rim.device.api.ui.autotext.AutoText net.rim.device.api.ui.component.BasicEditField Cree una instancia de AutoTextEditField.
AutoTextEditField autoT = new AutoTextEditField("AutoTextEditField: ", "");

2.

Crear un campo de fecha


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; java.lang.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MyUiScreen que se describe en el paso 3, representa la pantalla personalizada.
public class MyUi extends UiApplication { public static void main(String[] args) { MyUi theApp = new MyUi(); theApp.enterEventDispatcher(); }

116

Gua de desarrollo

Vistas de rbol

public MyUi() { pushScreen(new MyUiScreen()); }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla.
class MyUiScreen extends MainScreen { public MyUiScreen() { setTitle("UI Component Sample"); } }

4.

En el constructor de pantalla, cree un campo de fecha utilizando la clase DateField. Proporcione System.currentTimeMillis() como parmetro para devolver la hora actual. Utilice el estilo DateField.DATE_TIME para mostrar tanto la fecha como la hora. Puede utilizar otros estilos para mostrar slo la fecha o slo la hora.
add(new DateField("Date: ", System.currentTimeMillis(), DateField.DATE_TIME));

Crear un campo de contrasea


1. 2. Importe la clase net.rim.device.api.ui.component.PasswordEditField. Cree una instancia de PasswordEditField. Por ejemplo, la siguiente instancia utiliza un constructor que le permite proporcionar un valor inicial predeterminado para PasswordEditField:
PasswordEditField pwd = new PasswordEditField("PasswordEditField: ", "");

Vistas de rbol
Utilice una vista de rbol para mostrar objetos, por ejemplo, carpetas, de una forma jerrquica. Los objetos en la vista de rbol son nodos. El nodo de nivel superior es el nodo raz. El nodo en el rbol puede tener nodos secundarios que dependan del mismo. Un nodo con nodo secundario, ser un nodo principal. Los usuarios pueden realizar la acciones siguientes en una vista de rbol:

117

Gua de desarrollo

Vistas de rbol

Accin Expandir o contraer un objeto con un signo ms (+) o un signo menos (-) en una jerarqua.

Slo dispositivos BlackBerry con panel Slo dispositivos BlackBerry con tctil pantalla tctil y panel tctil Pulsar la tecla Espacio o hacer clic en el Tocar el objeto. panel tctil. Pulse la tecla Espacio. Hacer clic en el panel tctil.

Prctica recomendada: implementar vistas de rbol


Utilice la clase TreeField para crear vistas de rbol. Proporcione un men emergente en el caso de que los usuarios puedan llevar a cabo mltiples acciones cuando hagan clic en un nodo principal. Incluya un nodo raz slo si los usuarios necesitan la capacidad de llevar a cabo acciones en todo el rbol. De lo contrario, excluya el nodo raz.

Crear un campo para mostrar una vista de rbol


Utilice una vista de rbol para mostrar objetos, por ejemplo, una estructura de carpetas, de una forma jerrquica. El valor TreeField contiene nodos. El nodo superior es el nodo raz. El nodo en el rbol puede tener nodos secundarios que dependan del mismo. Un nodo con nodo secundario, ser un nodo principal. 1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.ui.component.TreeField; net.rim.device.api.ui.component.TreeFieldCallback; net.rim.device.api.ui.container.MainScreen; java.lang.String;

2.

Implemente la interfaz TreeFieldCallback.

118

Gua de desarrollo

Vistas de rbol

3.

Invoque TreeField.setExpanded() en el objeto TreeField para especificar si la carpeta se puede contraer. Cree un objeto TreeField y varios nodos secundarios en el objeto TreeField. Invoque TreeField.setExpanded() utilizando node4 como un parmetro para contraer la carpeta.
String fieldOne = new String("Main folder"); ... TreeCallback myCallback = new TreeCallback(); TreeField myTree = new TreeField(myCallback, Field.FOCUSABLE); int node1 = myTree.addChildNode(0, fieldOne); int node2 = myTree.addChildNode(0, fieldTwo); int node3 = myTree.addChildNode(node2, fieldThree); int node4 = myTree.addChildNode(node3, fieldFour); ... int node10 = myTree.addChildNode(node1, fieldTen); myTree.setExpanded(node4, false); ... mainScreen.add(myTree);

4.

Para volver a pintar un valor TreeField cuando cambia un nodo, cree una clase que implemente la interfaz TreeFieldCallback y que implemente el mtodo TreeFieldCallback.drawTreeItem. El mtodo TreeFieldCallback.drawTreeItem utiliza la cookie de un nodo de rbol para dibujar una String en la ubicacin de un nodo. El mtodo TreeFieldCallback.drawTreeItem invoca Graphics.drawText() para dibujar el valor String.
private class TreeCallback implements TreeFieldCallback { public void drawTreeItem(TreeField _tree, Graphics g, int node, int y, int width, int indent) { String text = (String)_tree.getCookie(node); g.drawText(text, indent, y); } }

119

Gua de desarrollo

Imgenes

Imgenes
Uso de imgenes cifradas
Acceder a una imagen cifrada a travs de un flujo de entrada
1. 2. 3. 4. Importe las clases necesarias.
import java.io.InputStream;

Guarde la imagen en la carpeta o subcarpeta del proyecto. Agregue la imagen al proyecto en BlackBerry Java Plug-in para Eclipse o BlackBerry Java Development Environment. Invoque getClass().getResourceAsStream() para recuperar la imagen como un flujo de entrada de bytes.
private InputStream input; ... Class _class = this.getClass(); input = _class.getResourceAsStream("/images/example.png");

Cifrar una imagen


1. 2. 3. Importe las clases necesarias.
import net.rim.device.api.system.EncodedImage;

Invoque EncodedImage.createEncodedImage(). Este mtodo utiliza los datos de imagen sin procesar en la matriz de bytes para crear una instancia de EncodedImage. Busque el IllegalArgumentException que EncodedImage.createEncodedImage() arroja si la matriz de bytes que ha proporcionado como parmetro no contiene un formato de imagen reconocido.
// Store the contents of the image file. private byte[] data = new byte[2430]; try { // Read the image data into the byte array input.read(data); } catch (IOException e) { // Handle exception. } try { EncodedImage image = EncodedImage.createEncodedImage(data, 0, data.length); } catch (IllegalArgumentException iae) { System.out.println("Image format not recognized."); }

120

Gua de desarrollo

Visualizacin de una imagen acercndola, alejndola y desplazndola

Mostrar una imagen cifrada


1. 2. 3. Importe la clase necesaria.
import net.rim.device.api.ui.component.BitmapField;

Invoque BitmapField.setImage() para asignar la imagen codificada a un BitmapField. Invoque add() para agregar BitmapField a la pantalla.
BitmapField field = new BitmapField(); field.setImage(image); add(field);

Especificar el tamao de la pantalla de una imagen cifrada


1. 2. Importe la clase necesaria.
import net.rim.device.api.system.EncodedImage;

Invoque EncodedImage.scaleImage32(int scaleX, int scaleY). Los parmetros del valor de escala pasados deben ser los nmeros net.rim.device.api.math.Fixed32 (0 < escala < 1 para escala ascendente y escala > 1 para escala descendente). scaleImage32() crea un nuevo EncodedImage en lugar de modificar el actual.

Especificar el modo de descodificacin de una imagen


1. 2. Importe la clase necesaria.
import net.rim.device.api.system.EncodedImage;

Invoque EncodedImage.setDecodeMode() utilizando uno de los siguientes modos como parmetro: Utilice DECODE_ALPHA para descodificar un canal alfa, si existe (ste es el modo predeterminado). Utilice DECODE_NATIVE para forzar la descodificacin de la imagen del mapa de bits segn el tipo de imagen nativa de mapa de bits de BlackBerry Device Software. Utilice DECODE_READONLY para marcar la imagen de mapa de bits descodificada como de slo lectura.

Visualizacin de una imagen acercndola, alejndola y desplazndola


La clase ZoomScreen le permite acercar, alejar y desplazar una imagen. Si el usuario del dispositivo BlackBerryhace clic en la bola de desplazamiento o en la pantalla tctil, la pantalla muestra la regin central de la imagen ampliada. Si la imagen se amplia, la pantalla tambin muestra una superposicin que resalta la regin sobre la que se ha aplicado el zoom. Al desplazar la bola de desplazamiento o al deslizar el dedo por la pantalla se desplazar la imagen. Cuando el usuario deja de desplazar y de acercar o alejar la imagen, la superposicin desaparece de la pantalla.

121

Gua de desarrollo

Visualizacin de una imagen acercndola, alejndola y desplazndola

En dispositivosBlackBerry con pantalla tctil, los usuarios pueden definir la regin de la imagen a la que aplicar el zoom. El usuario puede tocar dos puntos en la imagen para definir las esquinas opuestas en diagonal de la regin. Cuando se selecciona la regin, el usuario puede deslizar un dedo alrededor de la imagen para mover la regin del zoom. Para ampliar la regin definida, el usuario hace clic en la pantalla. Para alejar la imagen, el usuario pulsa la tecla Escape.

Cdigo de ejemplo: visualizacin de una imagen acercndola, alejndola y desplazndola


import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.extension.container.*; public class ZoomableImageApp extends UiApplication { public static void main(String[] args) { ZoomableImageApp theApp = new ZoomableImageApp(); theApp.enterEventDispatcher(); } public ZoomableImageApp() { EncodedImage myImg = new EncodedImage("myImg.jpg"); ZoomScreen zoomableImg = new ZoomScreen(myImg); pushScreen(zoomableImg); } }

Mostrar una imagen acercndola, alejndola y desplazndola


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.extension.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor, cree un EncodedImage mediante un recurso del proyecto, cree un ZoomScreen con EncodedImage e invoque pushScreen() para mostrar la imagen con el fin de acercarla, alejarla y desplazarla.
public class ZoomableImageApp extends UiApplication { public static void main(String[] args) { ZoomableImageApp theApp = new ZoomableImageApp(); theApp.enterEventDispatcher(); } public ZoomableImageApp() {

122

Gua de desarrollo

Visualizacin de una fila de imgenes para realizar desplazamientos

EncodedImage myImg = new EncodedImage("myImg.jpg"); ZoomScreen zoomableImg = new ZoomScreen(myImg); pushScreen(zoomableImg);

Visualizacin de una fila de imgenes para realizar desplazamientos


Puede utilizar la clase PictureScrollField para representar una fila horizontal de imgenes por las que el usuario se pueda desplazar mediante la bola de desplazamiento o con toques sobre la pantalla.
PictureScrollField le permite definir el estilo para resaltar la imagen seleccionada, el estilo del fondo de PictureScrollField, el texto mostrado bajo la imagen seleccionada, el texto de la sugerencia que aparece cuando

una imagen se selecciona inicialmente y la altura y anchura de las imgenes.

Ejemplo de cdigo: visualizar una fila de imgenes para realizar desplazamientos


import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.decor.*; import net.rim.device.api.ui.extension.component.*; public class PictureScrollFieldDemo extends UiApplication { public static void main(String[] args) { PictureScrollFieldDemo app = new PictureScrollFieldDemo(); app.enterEventDispatcher(); } public PictureScrollFieldDemo() { pushScreen(new PictureScrollFieldDemoScreen()); } } class PictureScrollFieldDemoScreen extends MainScreen { public PictureScrollFieldDemoScreen() { setTitle("PictureScrollField Demo"); Bitmap[] images = new Bitmap[3]; String[] labels = new String[3]; String[] tooltips = new String[3]; images[0] = Bitmap.getBitmapResource("img1.jpg"); labels[0] = "Label for image 1"; tooltips[0] = "Tooltip for image 1"; images[1] = Bitmap.getBitmapResource("img2.jpg"); labels[1] = "Label for image 2"; tooltips[1] = "Tooltip for image 2";

123

Gua de desarrollo

Visualizacin de una fila de imgenes para realizar desplazamientos

images[2] = Bitmap.getBitmapResource("img3.jpg"); labels[2] = "Label for image 3"; tooltips[2] = "Tooltip for image 3"; ScrollEntry[] entries = ScrollEntry[3]; for (int i = 0; i < entries.length; i++) { entries[i] = new ScrollEntry(images[i], labels[i],tooltips[i]); } PictureScrollField pictureScrollField = new PictureScrollField(150, 100); pictureScrollField.setData(entries, 0); pictureScrollField.setHighlightStyle(HighlightStyle.ILLUMINATE); pictureScrollField.setHighlightBorderColor(Color.BLUE); pictureScrollField.setBackground (BackgroundFactory.createSolidTransparentBackground(Color.RED, 150)); pictureScrollField.setLabelsVisible(true); add(pictureScrollField); } }

Mostrar una fila de imgenes para realizar desplazamientos


1. Importe las clases y las interfaces necesarias.
import import import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.decor.*; net.rim.device.api.ui.extension.component.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor, invoque pushScreen() para mostrar la pantalla personalizada de la aplicacin. La clase PictureScrollFieldDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class PictureScrollFieldDemo extends UiApplication { public static void main(String[] args) { PictureScrollFieldDemo app = new PictureScrollFieldDemo(); app.enterEventDispatcher(); } public PictureScrollFieldDemo() { pushScreen(new PictureScrollFieldDemoScreen()); } }

3.

Cree el marco para la pantalla personalizada ampliando la clase MainScreen.


class PictureScrollFieldDemoScreen extends MainScreen { public PictureScrollFieldDemoScreen()

124

Gua de desarrollo

Visualizacin de una fila de imgenes para realizar desplazamientos

{ }

4.

En el constructor, invoque setTitle() para establecer el texto que aparece en la seccin del ttulo de la pantalla.
setTitle("PictureScrollField Demo");

5.

En el constructor, cree e inicialice tres matrices para almacenar las imgenes para mostrar en PictureScrollField y las etiquetas y texto de las sugerencias que aparece cuando se selecciona cada una de las imgenes. En este ejemplo, PictureScrollField contiene tres imgenes.
Bitmap[] images = new Bitmap[3]; String[] labels = new String[3]; String[] tooltips = new String[3]; images[0] = Bitmap.getBitmapResource("img1.jpg"); labels[0] = "Label for image 1"; tooltips[0] = "Tooltip for image 1"; images[1] = Bitmap.getBitmapResource("img2.jpg"); labels[1] = "Label for image 2"; tooltips[1] = "Tooltip for image 2"; images[2] = Bitmap.getBitmapResource("img3.jpg"); labels[2] = "Label for image 3"; tooltips[2] = "Tooltip for image 3";

6.

En el constructor, cree e inicialice una matriz de objetos ScrollEntry. ScrollEntry representa cada elemento de PictureScrollField.
ScrollEntry[] entries = ScrollEntry[3]; for (int i = 0; i < entries.length; i++) { entries[i] = new ScrollEntry(images[i], labels[i], tooltips[i]); }

7.

En el constructor, cree e inicialice PictureScrollField con cada imagen de 150 pxeles de ancho y 100 pxeles de alto. Invoque setData() para establecer las entradas en PictureScrollField. El segundo parmetro en setData() especifica qu posicin de imagen se selecciona de forma predeterminada.
PictureScrollField pictureScrollField = new PictureScrollField(150, 100); pictureScrollField.setData(entries, 0);

8.

En el constructor, configure el estilo de PictureScrollField. Invoque setHighlightStyle() para especificar cmo se resalta la imagen seleccionada. Invoque setHighlightBorderColor() para especificar el color del borde de la imagen seleccionada. Invoque setBackground() para especificar el fondo de PictureScrollField. Invoque setLabelVisible() para especificar si PictureScrollField muestra la etiqueta de la imagen seleccionada.
pictureScrollField.setHighlightStyle(HighlightStyle.ILLUMINATE); pictureScrollField.setHighlightBorderColor(Color.BLUE); pictureScrollField.setBackground(BackgroundFactory .createSolidTransparentBackground(Color.RED, 150)); pictureScrollField.setLabelsVisible(true);

125

Gua de desarrollo

Visualizacin de una fila de imgenes para realizar desplazamientos

9.

En el constructor, invoque add() para mostrar PictureScrollField.


add(pictureScrollField);

126

Gua de desarrollo

Opciones de men

Opciones de men
Crear un men

10

La clase MainScreen proporciona los componentes estndar de una aplicacin del dispositivo BlackBerry. Incluye un men predeterminado. 1. Importe las clases y las interfaces necesarias.
import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase CreateMenuScreen que se describe en el paso 3, representa la pantalla personalizada.
public class CreateMenu extends UiApplication { public static void main(String[] args) { CreateMenu theApp = new CreateMenu(); theApp.enterEventDispatcher(); } public CreateMenu() { pushScreen(new CreateMenuScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla. Invoque add() para agregar un campo de texto a la pantalla. Invoque addMenuItem() para agregar un elemento de men al men que crea MainScreen.
class CreateMenuScreen extends MainScreen { public CreateMenuScreen() { setTitle("Create Menu Sample"); add(new RichTextField("Create a menu")); addMenuItem(_viewItem); } }

4.

Cree el elemento de men utilizando la clase MenuItem. Omita run() para especificar la accin que tiene lugar cuando el usuario hace clic en el elemento de men. Cuando el usuario hace clic en el elemento de men, la aplicacin invoca Menu.run().
private MenuItem _viewItem = new MenuItem("More Info", 110, 10) { public void run() { 127

Gua de desarrollo

Crear un men

};

Dialog.inform("Display more information");

5.

Omita close() para mostrar un cuadro de dilogo cuando el usuario haga clic en el elemento de men Cerrar. De forma predeterminada, el elemento de men Cerrar se incluye en el men que crea MainScreen. Invoque super.close() para cerrar la aplicacin. Cuando el usuario cierra el cuadro de dilogo, la aplicacin invoca MainScreen.close() para cerrar la aplicacin.
public void close() { Dialog.alert("Goodbye!"); super.close(); }

Ejemplo de cdigo: crear un men


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class CreateMenu extends UiApplication { public static void main(String[] args) { CreateMenu theApp = new CreateMenu(); theApp.enterEventDispatcher(); } public CreateMenu() { pushScreen(new CreateMenuScreen()); } } class CreateMenuScreen extends MainScreen { public CreateMenuScreen() { setTitle("Create Menu Sample"); add(new RichTextField("Create a menu")); addMenuItem(_viewItem); } private MenuItem _viewItem = new MenuItem("More Info", 110, 10) { public void run() { Dialog.inform("Display more information"); } }; public void close() { Dialog.alert("Goodbye!"); super.close(); } }

128

Gua de desarrollo

Prctica recomendada: implementar mens

Prctica recomendada: implementar mens


Deber siempre proporcionar un men completo. Asegrese de que los usuarios pueden pulsar la tecla Men para abrir el men completo y de que pueden iniciar una accin cuando un elemento del men est seleccionado. Asegrese de que los usuarios pueden tambin mantener pulsada la tecla Men para abrir el cuadro de dilogo y cambiar las aplicaciones. Para el elemento de men predeterminado, utilice el elemento de men que con toda probabilidad seleccionarn los usuarios. Coloque el elemento de men predeterminado y otros elementos de men comunes en la parte central del men. Compruebe que el orden de los elementos de men es coherente con el orden de los elementos de men en otras aplicaciones del dispositivo BlackBerry. Agrupe los elementos de men de acuerdo a su uso comn o funcionalidad comn, y siempre que sea posible, intente probar sus grupos con los usuarios. Inserte separadores entre los grupos de elemento de men. No coloque juntos elementos de men de acciones conflictivas. Por ejemplo, no coloque un elemento de men "Eliminar" junto a un elemento de men "Abrir". Incluya siempre los elementos de men "Cambiar aplicacin" y "Cerrar". Coloque estos elementos de men al final del men. Si utiliza componentes estndar, estos elementos de men se incluyen automticamente. Utilice etiquetas concisas y descriptivas que no superen los 12 caracteres. Si una etiqueta es demasiado larga, aparecern puntos suspensivos (...) para indicar que el texto se ha cortado. Utilice verbos para las etiquetas. Utilice ttulos con maysculas para las etiquetas. Utilice puntos suspensivos en una etiqueta de elemento de men para indicar que los usuarios deben realizar otra accin despus de hacer clic en el elemento de men. Por ejemplo, si los usuarios hacen clic en el elemento de men Ir a la fecha... en el calendario, stos deben especificar una fecha en la pantalla que aparece. Evite el uso de smbolos como, por ejemplo, un asterisco (*) en las etiquetas.

Directrices para las etiquetas


Submens
Un submen es un grupo de elementos de men relacionados que aparece como un subconjunto de un elemento de men en el men completo. Al incluir elementos en un submen, los usuarios pueden encontrar elementos que se utilizan con frecuencia o elementos importantes ms fcilmente en el men completo. Los submens incluyen normalmente los siguientes tipos de acciones: enviar elementos de mltiples maneras (por ejemplo, envo de una imagen en un mensaje correo electrnico, un mensaje MMS, o como postal de audio) clasificar, buscar, encontrar y filtrar elementos de distintas formas (por ejemplo, filtrando los mensajes por remitente o asunto) cambiar vistas (por ejemplo, vista Da, Semana o Agenda en un calendario)

129

Gua de desarrollo

Submens

Accin Al seleccionar un elemento de men en un men completo, mostrar un submen.

Slo dispositivos BlackBerry con panel tctil Hacer clic en el panel tctil. Desplazar un dedo a la derecha en el panel tctil. Pulse la tecla Men. Pulse la tecla Intro. Hacer clic en el panel tctil. Pulse la tecla Men. Pulse la tecla Intro. Desplazar un dedo a la izquierda en el panel tctil. Pulsar la tecla Escape.

Slo dispositivos BlackBerry con pantalla tctil y panel tctil Tocar el elemento de men. Hacer clic en el panel tctil. Desplazar un dedo a la derecha en el panel tctil. Pulse la tecla Men. Pulse la tecla Intro. Tocar el elemento de men. Hacer clic en el panel tctil. Pulse la tecla Men. Pulse la tecla Intro. Tocar fuera del submen. Desplazar un dedo a la izquierda en el panel tctil. Pulsar la tecla Escape. Tocar fuera del men completo y del submen dos veces. Pulsar la tecla Escape dos veces. Abrir o cerrar el control deslizante.

Seleccionar un elemento de men de un submen.

Cerrar un submen.

Cerrar un submen y un men completo.

Pulsar la tecla Escape dos veces.

Aparece una flecha cuando los elementos del submen estn disponibles para un elemento en el men completo.

Un elemento del men completo con una flecha

Un men completo y un submen

130

Gua de desarrollo

Submens

Prctica recomendada: implementar submens


Utilice la subclase Submenu para crear submens. Utilice submens para reducir el nmero total de elementos de men en el men completo. Por ejemplo, si los usuarios tienen que desplazarse por la pantalla para consultar todos los elementos en un men completo, agrupe algunos de los elementos del men en un submen. Agrupe elementos relacionados en un mismo submen. Por ejemplo, si "Ordenar por" aparece en el men completo, agrupe "Fecha", "Nombre", y "Asunto" en un submen. Considere, por ejemplo, agrupar las caractersticas avanzadas en un submen. Por ejemplo, utilice "Opciones adicionales" en el men completo y agrupe las opciones en el submen. Evite utilizar submens para solamente uno o dos elementos de men. Si un submen incluye ms de seis elementos, considere agrupar los elementos en dos secciones del submen. Coloque los elementos de men utilizados con ms frecuencia a la cabeza del submen, inserte un separador y, a continuacin, ordene el resto de elementos alfabticamente. Si un elemento del men requiere que los usuarios realicen alguna accin adems de hacer clic en el elemento (por ejemplo, si un usuario tiene que especificar una fecha), abra un cuadro de dilogo. Evite incluir elementos de men utilizados con frecuencia o elementos del men importantes en submens. Evite implementar un submen en otro submen. En el men completo, utilice etiquetas concisas y descriptivas que definan claramente la accin. Los usuarios no deberan tener que abrir el submen para comprender el significado del elemento del men completo. En el men completo, utilice verbos para las etiquetas. Utilice nombres solamente si el significado es claro. Por ejemplo, si aparece "Cuentas de correo electrnico" en el men completo, agrupe cada cuenta correo electrnico en un submen. Evite repetir los mismos verbos en los submens. Por ejemplo, evite utilizar "Ordenar por" en el men completo y "Ordenar por fecha" o "Ordenar por nombre" en el submen. Utilice ttulos con maysculas para las etiquetas. Ponga en maysculas la primera palabra del submen, incluso si es una preposicin. (Por ejemplo, utilice "Enviar"> "Como correo electrnico" en lugar de "como correo electrnico"). Evite utilizar el trmino "Ms" en el men completo a menos que la ubicacin del elemento del men indique claramente a qu se refiere ese "Ms". Por ejemplo, si "Bandeja de entrada", "Bandeja de Salida", y "Ms" aparecen entre separadores en el men completo, agrupe las opciones adicionales asociadas a un buzn en un submen.

Directrices para las etiquetas

Crear un submen
Puede crear un submen para una aplicacin del dispositivo BlackBerry. Un submen aparece cuando un usuario selecciona un elemento del men que tiene un submen asociado al mismo. 1. Importe las clases y las interfaces necesarias.

131

Gua de desarrollo

Submens

import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase CreateSubmenuScreen que se describe en el paso 3, representa la pantalla personalizada.
public class CreateSubmenu extends UiApplication { public static void main(String[] args) { CreateSubmenu theApp = new CreateSubmenu(); theApp.enterEventDispatcher(); } public CreateSubmenu() { pushScreen(new CreateSubmenuScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla. Invoque add() para agregar un campo de texto a la pantalla.
class CreateSubmenuScreen extends MainScreen { public CreateSubmenuScreen() { setTitle("Create Submenu Sample"); add(new RichTextField("Create a submenu")); } }

4.

Cree elementos de submen mediante la clase MenuItem. Para cada elemento del submen, omita run() para especificar la accin que tiene lugar cuando el usuario hace clic en el elemento de men. Cuando el usuario hace clic en el elemento de men, la aplicacin invoca Menu.run().
private MenuItem _status1 = { public void run() { Dialog.inform("I'm } }; private MenuItem _status2 = { public void run() { Dialog.inform("I'm } }; new MenuItem("Available", 100, 1)

available"); new MenuItem("Unavailable", 200, 2)

unavailable");

132

Gua de desarrollo

Submens

5.

Omita makeMenu() para crear el men para la aplicacin. Cree el submen utilizando la clase SubMenu. Invoque add() para agregar elementos de submen al submen. Invoque super.makeMenu() para crear el men.
protected void makeMenu( Menu menu, int instance ) { SubMenu statusSubMenu = new SubMenu(null,"My Status",300,3); statusSubMenu.add(_status1); statusSubMenu.add(_status2); menu.add(statusSubMenu); super.makeMenu(menu, instance); };

Ejemplo de cdigo: crear un submen


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; public class CreateSubmenu extends UiApplication { public static void main(String[] args) { CreateSubmenu theApp = new CreateSubmenu(); theApp.enterEventDispatcher(); } public CreateSubmenu() { pushScreen(new CreateSubmenuScreen()); } } class CreateSubmenuScreen extends MainScreen { public CreateSubmenuScreen() { setTitle("Create Submenu Sample"); add(new RichTextField("Create a submenu")); } private MenuItem _status1 = new MenuItem("Available", 100, 1) { public void run() { Dialog.inform("I'm available"); } }; private MenuItem _status2 = new MenuItem("Unavailable", 200, 2) { public void run() { Dialog.inform("I'm unavailable"); } }; protected void makeMenu( Menu menu, int instance ) { SubMenu statusSubMenu = new SubMenu(null,"My Status",300,3); statusSubMenu.add(_status1); 133

Gua de desarrollo

Mens emergentes

};

statusSubMenu.add(_status2); menu.add(statusSubMenu); super.makeMenu(menu, instance);

Mens emergentes
Un men emergente proporciona a los usuarios una forma rpida de acceder las acciones ms comunes para un elemento seleccionado. Tambin puede utilizar un men emergente si un elemento seleccionado tiene varias acciones asociadas al mismo o si un elemento seleccionado no cuenta con acciones principales asociadas al mismo. Puede crear un men emergente que contenga nueve acciones, seis acciones o tres acciones. Slo dispositivos BlackBerry con panel tctil Hacer clic en el panel tctil. Si ya se ha asignado una accin principal a un elemento (por ejemplo, abrir un mensaje), los usuarios pueden hacer clic y mantener pulsado el panel tctil para abrir un men emergente. Slo dispositivos BlackBerry con pantalla tctil y panel tctil Tocar el elemento. Hacer clic en el panel tctil. Si una accin principal ya ha sido asignada a un elemento (por ejemplo, abrir un mensaje), los usuarios pueden hacer clic en y mantener pulsado el panel tctil o bien tocar con un dedo y mantenerlo sobre la pantalla tctil para abrir un men emergente. Tocar el elemento. Hacer clic en el panel tctil. Pulse la tecla Intro. Tocar fuera del men emergente. Pulsar la tecla Escape. Abrir o cerrar el control deslizante.

Accin Abrir el men emergente.

Seleccionar un elemento del men emergente. Cerrar el men emergente.

Hacer clic en el panel tctil. Pulse la tecla Intro.

Pulsar la tecla Escape.

134

Gua de desarrollo

Mens emergentes

Los mens emergentes reemplazan los mens contextuales o los mens reducidos. Cualquier men contextual existente se convierte automticamente en men emergente.

Prctica recomendada: implementar mens emergentes


Utilice mens emergentes en lugar de mens contextuales (mens reducidos). Asegrese de que el men emergente proporciona valores a los usuarios. Configure el elemento del men que con mayor probabilidad escogern los usuarios como elemento de men predeterminado. El elemento predeterminado del men emergente debe ser el mismo que el elemento predeterminado en el men completo. Incluya slo las acciones ms comunes para un elemento seleccionado en un men emergente. Incluya un icono y una etiqueta para cada elemento en el men emergente. Cree iconos con un tamao medio de 33 por 33 pxeles. Estos iconos aparecen en un fondo de 60 por 40 pxeles y deberan tener algn espacio negativo. Coloque el elemento de men predeterminado en el centro del men emergente. Ordene el resto de los elementos desde el ms comn al menos comn segn las posiciones enumeradas a continuacin. Intente aprovechar la memoria de hbitos de los usuarios, para ello el orden de las acciones deber ser coherente con el orden de las acciones en otras aplicaciones del dispositivoBlackBerry.

Directrices para colocar elementos en mens emergentes


Si las posiciones se rellenan de forma dinmica, no debe mostrar elementos de men que no estn disponibles. Permita a los elementos de men disponibles cambiar la posicin.
135

Gua de desarrollo

Mens emergentes

Si no hay suficientes acciones para rellenar el men, utilice un men ms pequeo. Si es necesario rellenar una o dos posiciones, incluya acciones tiles como Copiar o Buscar. Si no rellena una posicin, aparecer "Cambiar aplicacin" o "Inicio".

Acerca de la colocacin de elementos en los mens emergentes


Los mens emergentes muestran los elementos de men en cuadrculas de 3 por 3, de 3 por 2 o de 3 por 1 dependiendo del nmero de elementos. De forma predeterminada, el men emergente siempre incluye un elemento para abrir el men completo. Puede proporcionar hasta ocho elementos adicionales. Si proporciona ms de ocho elementos, los elementos adicionales no se muestran. Puede agregar elementos adicionales al men completo en su lugar. El primer elemento que agregue al vector de los elementos CommandItem es el elemento predeterminado en el men emergente. El elemento predeterminado aparece seleccionado en el centro de la cuadrcula cuando el usuario del dispositivo BlackBerry abre el men emergente. El resto de elementos se posicionan en el men emergente segn el orden en el que los agregue. Si el nmero de elementos que agregue al men emergente deja celdas vacas en la cuadrcula, se agregarn al men elementos de relleno. El primer elemento de relleno es una opcin para cambiar aplicaciones. El segundo elemento de relleno es una opcin para volver a la pantalla de inicio.

Compatibilidad con los mens contextuales heredados


A partir de BlackBerry Java SDK 6.0, el men contextual de una aplicacin o men reducido se convierte en men emergente. Tanto si ha agregado elementos de men a un men contextual como si ha utilizado elementos agregados al men contextual de forma predeterminada, no tiene por qu cambiar su cdigo para que estos elementos aparezcan en su lugar en el men emergente. Sin embargo, BlackBerry Java SDK 6.0 incluye clases e interfaces que puede utilizar para crear un men emergente y le permite utilizar la API de marco de comandos para que el cdigo sea ms modular. Por ejemplo, si su aplicacin dispone de un componente de interfaz de usuario y un elemento de men que lleva a cabo la misma funcin, a travs de la API de marco de comandos, puede escribir el cdigo para dicha funcin una vez y utilizarlo en la aplicacin, as como que est disponible para que otras aplicaciones lo utilicen. Un elemento de men contextual incluido en un nmero ordinal que ha determinado la colocacin del elemento en el men. Cuanto menor sea el nmero ordinal, ms alta ser la posicin del elemento en el men. Si un men contextual se convierte en un men emergente, el elemento del men con el nmero ordinal ms bajo pasa a ser el elemento de men emergente predeterminado. Los elementos restantes se agregan al men emergente desde el nmero ordinal ms bajo al ms alto. Si se asocia un icono con un elemento de men en su men contextual heredado,
136

Gua de desarrollo

Mens emergentes

se utilizar para el elemento en el men emergente. De lo contrario, se utiliza un icono predeterminado. Al igual que otros mens emergentes, slo los primeros ocho elementos del men contextual se muestran en el men emergente. Si el men contextual tiene ms de ocho elementos de men, asegrese de que utiliza los nmeros ordinales para los elementos de men adecuadamente de forma que los elementos ms importantes y tiles aparezcan en el men emergente. Para obtener ms informacin acerca de la creacin de mens contextuales, visite el Centro de recursos para desarrolladores de BlackBerry en www.blackberry.com/developer para leer el artculo Distinguir entre un men completo y un men de acciones principales.

Crear un men emergente


Puede crear un men emergente mediante las clases disponibles en el paquete net.rim.device.api.ui.menu y puede definir la funcionalidad de los elementos del men emergente mediante la API de marco de comandos. Un men emergente consiste en un proveedor de men contextual, en un proveedor de elementos de comando y en elementos de comando. Componente Proveedor de men contextual Descripcin Utiliza la clase DefaultContextMenuProvider para crear y mostrar el men emergente de una pantalla. Si un usuario del dispositivo BlackBerry abre un men emergente, el proveedor de men contextual busca campos en la pantalla que sean proveedores de elementos de comando. DefaultContextMenuProvider es la implementacin predeterminada de ContextMenuProvider. Si no proporciona una pantalla con un proveedor de men contextual, el men contextual heredado se convierte y se muestra como un men emergente. Utiliza la clase CommandItemProvider para configurar un campo en la pantalla de la interfaz de usuario para que el campo pueda proporcionar contexto y elementos de comando al men emergente segn el contexto actual. Por ejemplo, podra configurar una direccin de correo electrnico como proveedor de elementos de comando y proporcionar al usuario distintas acciones dependiendo de si la direccin de correo electrnico est en la lista de contactos del usuario. Utiliza la clase CommandItem para especificar el texto, icono y comportamiento de un elemento del men emergente. Define el comportamiento del men emergente mediante un comando. El comando acta como un proxy para una instancia de un controlador de comandos, que define la funcionalidad del elemento de men emergente. Por ejemplo, para una direccin de correo electrnico, podra proporcionar elementos de comando para agregar o ver un contacto dependiendo de si la direccin de correo electrnico seleccionada aparece en la lista de contactos del usuario. El controlador de comandos contendra el cdigo para agregar o ver el contacto.
137

Proveedor de elementos de comando

Elementos de comando

Gua de desarrollo

Mens emergentes

Componente

Descripcin Para obtener ms informacin acerca de los comandos y los controladores de comandos, consulteAPI de marco de comandos. La aplicacin de ejemplo del marco de comandos proporcionada en BlackBerry Java SDK muestra los comandos y los controladores de comandos.

Si utiliza un men contextual heredado, BlackBerry Device Software 6.0 convierte los elementos del men contextual en elementos de comando y los enva al proveedor de elementos de comando. Para obtener ms informacin, consulteCompatibilidad con los mens contextuales heredados.

Crear un men emergente


1. Importe las clases y las interfaces necesarias.
import import import import import import import import import net.rim.device.api.command.*; net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.menu.*; net.rim.device.api.ui.image.*; net.rim.device.api.util.*; java.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase MyPopUpMenuScreen que se describe en el paso 3, representa la pantalla personalizada.
public class MyPopUpMenuApp extends UiApplication { public static void main(String[] args) { Mypop-upMenuApp theApp = new Mypop-upMenuApp(); theApp.enterEventDispatcher(); } public Mypop-upMenuApp() { pushScreen(new Mypop-upMenuScreen()); } }

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla.
class MyPopUpMenuScreen extends MainScreen { EmailAddressEditField emailAddress; public Mypop-upMenuScreen() {

138

Gua de desarrollo

Mens emergentes

setTitle("Pop-Up Menu Demo");

4.

En el constructor de pantalla, especifique un proveedor de men contextual. Pase un objeto DefaultContextMenuProvider a Screen.setContextMenuProvider() para hacer que su pantalla muestre un men emergente.
setContextMenuProvider(new DefaultContextMenuProvider());

5.

En el constructor de pantalla, cree los componentes de interfaz de usuario que puedan invocar el men emergente. En el siguiente ejemplo de cdigo, la etiqueta utiliza la propiedad Field.FOCUSABLE para permitir a los usuario seleccionar el campo.
LabelField labelField = new LabelField("Click to invoke pop-up menu", Field.FOCUSABLE); emailAddress = new EmailAddressEditField("Email address: ", "name@blackberry.com", 40);

6.

En el constructor de pantalla, configure los componentes de interfaz de usuario como proveedores de elemento de comando. El objeto DefaultContextMenuProvider buscar campos configurados como proveedores de elemento de comando y los utilizar para crear y mostrar un men emergente. En cada componente, invoque Field.setCommandItemProvider() para configurar el campo como un proveedor de elemento de comando. La ItemProvider clase est descrita en el paso 7.
ItemProvider itemProvider = new ItemProvider(); labelField.setCommandItemProvider(itemProvider); emailAddress.setCommandItemProvider(itemProvider);

7.

En la pantalla personalizada, implemente la interfaz de CommandItemProvider. En getContext(), devuelva el campo configurado como proveedor de elemento de comando. En getItems(), cree un objeto Vector al que agregar los elementos de men emergente.
class ItemProvider implements CommandItemProvider { public Object getContext(Field field) { return field; } public Vector getItems(Field field) { } }

8.

En getItems(), proporcione los elementos de men emergente creando instancias de la clase CommandItem. En cada elemento del comando, especifique el texto de men emergente, el icono, y el comando. En el ejemplo de cdigo siguiente, se utiliza una declaracin if-then-else para comprobar qu componente ha invocado el men emergente antes de crear el CommandItem. El comando es un proxy a una instancia de una clase que ampla la clase CommandHandler abstracta descrita en el paso 9. Invoque Vector.addElement () para agregar los elementos de men emergente al Vector. Devuelva el Vector.
CommandItem defaultCmd; Image myIcon = ImageFactory.createImage(Bitmap.getBitmapResource("my_logo.png")); if(field.equals(emailAddress)){ 139

Gua de desarrollo

Mens emergentes

} else { defaultCmd = new CommandItem(new StringProvider("Label Field"), myIcon, new Command(new DialogCommandHandler())); } items.addElement(defaultCmd); return items;

defaultCmd = new CommandItem(new StringProvider("Email Address"), myIcon, new Command(new DialogCommandHandler()));

9.

En la pantalla personalizada, cree un controlador de comandos creando una clase que ample la clase CommandHandler abstracta. En execute(), defina la funcionalidad que desea asociar a los elementos de men emergente. Este controlador de comandos podra ser utilizado por cualquier componente de la interfaz de usuario en su pantalla (por ejemplo, elementos del men completo, botones, etc.). Al no implementarse canExecute(), este comando es siempre ejecutable. En el ejemplo de cdigo siguiente, aparecer un cuadro de dilogo cuando el usuario haga clic en un elemento de men emergente.
class DialogCommandHandler extends CommandHandler { public void execute(ReadOnlyCommandMetadata metadata, Object context) { Dialog.alert("Executing command for " + context.toString()); } }

Ejemplo de cdigo: crear un men emergente


import net.rim.device.api.command.*; import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.menu.*; import net.rim.device.api.ui.image.*; import net.rim.device.api.util.*; import java.util.*; public class MyPopUpMenuApp extends UiApplication { public static void main(String[] args) { MyPopUpMenuApp theApp = new MyPopUpMenuApp(); theApp.enterEventDispatcher(); } public MyPopUpMenuApp() { pushScreen(new MyPopUpMenuScreen()); } } class MyPopUpMenuScreen extends MainScreen { EmailAddressEditField emailAddress; public MyPopUpMenuScreen() { setTitle("Pop-Up Menu Demo");

140

Gua de desarrollo

} /* To override the default functionality that prompts the user to save changes before the application closes, * override the MainScreen.onSavePrompt() method. In the following code sample, the return value is true which * indicates that the application does not prompt the user before closing. */ protected boolean onSavePrompt() { return true; } class ItemProvider implements CommandItemProvider { public Object getContext(Field field) { return field; } public Vector getItems(Field field) { Vector items = new Vector(); CommandItem defaultCmd; Image myIcon = ImageFactory.createImage(Bitmap .getBitmapResource("my_logo.png")); if(field.equals(emailAddress)){ defaultCmd = new CommandItem(new StringProvider("Email Address"), myIcon, new Command(new DialogCommandHandler())); } else{ defaultCmd = new CommandItem(new StringProvider("Label Field"), myIcon, new Command(new DialogCommandHandler())); } items.addElement(defaultCmd); return items; } } class DialogCommandHandler extends CommandHandler { public void execute(ReadOnlyCommandMetadata metadata, Object context) { Dialog.alert("Executing command for " + context.toString()); } }

setContextMenuProvider(new DefaultContextMenuProvider()); LabelField labelField = new LabelField("Click to invoke pop-up menu", Field.FOCUSABLE); emailAddress = new EmailAddressEditField("Email address: ", "name@blackberry.com", 40); ItemProvider itemProvider = new ItemProvider(); labelField.setCommandItemProvider(itemProvider); emailAddress.setCommandItemProvider(itemProvider); add(labelField); add(emailAddress);

141

Gua de desarrollo

Agregar un elemento de men a una aplicacin de BlackBerry Device Software

Agregar un elemento de men a una aplicacin de BlackBerry Device Software


Puede agregar un elemento de men a una aplicacin de BlackBerry Device Software utilizando la API de elementos de men en el paquete net.rim.blackberry.api.menuitem. Por ejemplo, puede agregar un elemento de men denominado Ver pedidos de venta a la aplicacin Contactos de un dispositivo BlackBerry de forma que cuando un usuario haga clic en el elemento de men, se abra una aplicacin de administracin de las relaciones con el cliente (CRM)y muestre una lista de los pedidos de venta para dicho contacto. La clase ApplicationMenuItemRepository proporciona las constantes que especifican la aplicacin de BlackBerry Device Software en la que debera aparecer su elemento de men. Por ejemplo, la constante MENUITEM_MESSAGE_LIST especifica que el elemento de men debe aparecer en la aplicacin Mensajes.

Agregar un elemento de men a una aplicacin de BlackBerry Device Software


1. Importe las clases y las interfaces necesarias.
import import import import net.rim.blackberry.api.menuitem.*; net.rim.blackberry.api.pdap.*; net.rim.device.api.ui.*; net.rim.device.api.ui.component.*;

2.

Ample la clase abstracta ApplicationMenuItem para crear un elemento de men. Omita el constructor ApplicationMenuItem() con un entero para especificar la posicin del elemento de men en el men. Un nmero ms alto coloca el elemento de men en una escala inferior en el men.
public class SampleMenuItem extends ApplicationMenuItem { SampleMenuItem() { super(20); } }

3.

Implemente toString() para especificar el texto del elemento de men.


public String toString() { return "Open the Contacts Demo application"; }

4.

Invoque getInstance() para recuperar el repositorio de la aplicacin.


ApplicationMenuItemRepository repository = ApplicationMenuItemRepository.getInstance();

5.

Cree una instancia de una clase para ampliar la clase MenuItem.


ContactsDemoMenuItem contactsDemoMenuItem = new ContactsDemoMenuItem();

142

Gua de desarrollo

Cambiar la apariencia de un men

6.

Invoque ApplicationMenuItemRepository.addMenuItem() para agregar el elemento de men al correspondiente repositorio de la aplicacin del dispositivo BlackBerry.
repository.addMenuItem(ApplicationMenuItemRepository .MENUITEM_ADDRESSCARD_VIEW, contactsDemoMenuItem);

7.

Implemente run() para especificar el comportamiento del elemento de men. En el siguiente cdigo de ejemplo, cuando un usuario hace clic en el elemento de men y en el caso de que exista un objeto Contact, la aplicacin ContactsDemo recibe el evento e invoca ContactsDemo.enterEventDispatcher().
public Object run(Object context) { BlackBerryContact c = (BlackBerryContact)context; if ( c != null ) { new ContactsDemo().enterEventDispatcher(); } else { throw new IllegalStateException( "Context is null, expected a Contact instance"); } Dialog.alert("Viewing an email message in the email view"); return null; }

Cambiar la apariencia de un men


Puede cambiar el fondo, el borde y la fuente de un men mediante la clase Menu en el paquete net.rim.device.api.ui.component. Por ejemplo, puede cambiar la apariencia del men para que tenga un aspecto y sensacin similar al resto de aplicaciones del dispositivo BlackBerry. Cuando cambia la apariencia de un men, la aplicacin de dispositivo BlackBerry omite el tema establecido en el dispositivo BlackBerry.

Cambiar la apariencia de un men


1. Importe las clases y las interfaces necesarias.
import import import import import net.rim.device.api.ui.*; net.rim.device.api.ui.component.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.decor.*; net.rim.device.api.system.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase CreateCustomMenuScreen, que se describe en el paso 3, representa la pantalla personalizada.
public class CreateCustomMenu extends UiApplication { public static void main(String[] args)

143

Gua de desarrollo

Cambiar la apariencia de un men

} public CreateCustomMenu() { pushScreen(new CreateCustomMenuScreen()); }

CreateCustomMenu theApp = new CreateCustomMenu(); theApp.enterEventDispatcher();

3.

Cree la pantalla personalizada de la aplicacin ampliando la clase MainScreen. En el constructor de la pantalla, invoque setTitle() para especificar el ttulo de la pantalla. Invoque add() para agregar un campo de texto a la pantalla.
class CreateCustomMenuScreen extends MainScreen { Background _menuBackground; Border _menuBorder; Font _menuFont; CreateCustomMenuScreen() { setTitle("Custom Menu Sample"); add(new RichTextField("Creating a custom menu")); } }

4.

En el constructor de la pantalla, especifique la apariencia del men. Cree el espaciado para el borde que rodea el men a travs de un objeto XYEdges. Invoque createRoundedBorder() con el fin de crear un borde con las esquinas redondeadas. Invoque createSolidTransparentBackground() para crear un color de fondo transparente para el men.
XYEdges thickPadding = new XYEdges(10, 10, 10, 10); _menuBorder = BorderFactory.createRoundedBorder(thickPadding, Border.STYLE_DOTTED); _menuBackground = BackgroundFactory.createSolidTransparentBackground(Color .LIGHTSTEELBLUE, 50);

5.

En el constructor de la pantalla, especifique el tipo de fuente para el men utilizando un objeto FontFamily. Invoque forName() para recuperar un tipo de fuente en el dispositivo BlackBerry. Invoque getFont() para especificar el estilo y el tamao del tipo de fuente.
try {

} catch(final ClassNotFoundException cnfe) { UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { Dialog.alert("FontFamily.forName() threw " + cnfe.toString());

FontFamily family = FontFamily.forName("BBCasual"); _menuFont = family.getFont(Font.PLAIN, 30, Ui.UNITS_px);

144

Gua de desarrollo

Cambiar la apariencia de un men

});

6.

En la clase Screen, omita makeMenu() para aplicar la apariencia del men. Invoque setBackground(), setBorder() y setFont() para aplicar la apariencia del men que ha especificado en los pasos 4 y 5.
protected void makeMenu(Menu menu, int context) { menu.setBorder(_menuBorder); menu.setBackground(_menuBackground); menu.setFont(_menuFont); super.makeMenu(menu, context); }

Ejemplo de cdigo: cambiar la apariencia de un men


import net.rim.device.api.ui.*; import net.rim.device.api.ui.component.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.decor.*; import net.rim.device.api.system.*; public class CreateCustomMenu extends UiApplication { public static void main(String[] args) { CreateCustomMenu theApp = new CreateCustomMenu(); theApp.enterEventDispatcher(); } public CreateCustomMenu() { pushScreen(new CreateCustomMenuScreen()); } } class CreateCustomMenuScreen extends MainScreen { Border _menuBorder; Background _menuBackground; Font _menuFont; CreateCustomMenuScreen() { setTitle("Custom Menu Sample"); add(new RichTextField("Creating a custom menu")); XYEdges thickPadding = new XYEdges(10, 10, 10, 10); _menuBorder = BorderFactory.createRoundedBorder(thickPadding, Border.STYLE_DOTTED); _menuBackground = BackgroundFactory.createSolidTransparentBackground(Color .LIGHTSTEELBLUE, 50); try { FontFamily family = FontFamily.forName("BBCasual"); _menuFont = family.getFont(Font.PLAIN, 30, Ui.UNITS_px); } catch(final ClassNotFoundException cnfe) { 145

Gua de desarrollo

Cambiar la apariencia de un men

} } protected void makeMenu(Menu menu, int context) { menu.setBorder(_menuBorder); menu.setBackground(_menuBackground); menu.setFont(_menuFont); super.makeMenu(menu, context); }

UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { Dialog.alert("FontFamily.forName() threw " + cnfe.toString()); } });

146

Gua de desarrollo

Fuentes personalizadas

Fuentes personalizadas

11

La clase FontManager del paquete net.rim.device.api.ui proporciona constantes y mtodos que puede utilizar para instalar y desinstalar una fuente TrueType en un dispositivo BlackBerry. El tamao mximo permitido para el archivo de la fuente TrueType es de 60 KB. Puede especificar que la fuente est disponible para la aplicacin que la instale o para todas las aplicaciones del dispositivo BlackBerry. La clase FontManager tambin proporciona mtodos para establecer la fuente predeterminada para el dispositivo BlackBerry o la aplicacin.

Instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application
1. Importe las clases y las interfaces necesarias.
import import import import import net.rim.device.api.system.*; net.rim.device.api.ui.*; net.rim.device.api.ui.container.*; net.rim.device.api.ui.component.*; java.util.*;

2.

Cree el marco de la aplicacin ampliando la clase UiApplication. En main(), cree una instancia de la clase nueva e invoque enterEventDispatcher() para activar la aplicacin para recibir eventos. En el constructor de la aplicacin, invoque pushScreen() para mostrar la pantalla personalizada para la aplicacin. La clase FontLoadingDemoScreen, descrita en el paso 3, representa la pantalla personalizada.
public class FontLoadingDemo extends UiApplication { public static void main(String[] args) { FontLoadingDemo app = new FontLoadingDemo(); app.enterEventDispatcher(); } public FontLoadingDemo() { pushScreen(new FontLoadingDemoScreen()); } }

3.

Cree la pantalla personalizada ampliando la clase MainScreen. Invoque setTitle() para configurar el texto que aparece en la seccin del ttulo de la pantalla. Cree un objeto nuevo LabelField. Debe aplicar la fuente personalizada a este objeto.
class FontLoadingDemoScreen extends MainScreen { public FontLoadingDemoScreen() { setTitle("Font Loading Demo"); LabelField helloWorld = new LabelField("Hello World"); } } 147

Gua de desarrollo

Ejemplo de cdigo: instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application

4.

En el constructor de la pantalla, invoque el mtodo FontManager.getInstance() para obtener una referencia al objeto FontManager, a continuacin, invoque el mtodo load() para instalar la fuente. Ajuste la invocacin load() a una declaracin IF para comprobar si la instalacin ha sido correcta. El mtodo load () devuelve un indicador que especifica si la fuente se ha instalado correctamente. El cdigo siguiente especifica que la fuente slo puede ser utilizada por la aplicacin.
if (FontManager.getInstance().load("Myfont.ttf", "MyFont", FontManager.APPLICATION_FONT) == FontManager.SUCCESS) { }

5.

En el constructor de la pantalla, en un bloque try/catch en la declaracin IF que ha creado en el paso 5, cree un objeto Font para la fuente que acaba de instalar. Invoque el mtodo setFont() para aplicar la fuente al valor LabelField creado en el paso 5.
try {

} catch (ClassNotFoundException e) { System.out.println(e.getMessage()); }

FontFamily family = FontFamily.forName("MyFont"); Font myFont = family.getFont(Font.PLAIN, 50); helloWorld.setFont(myFont);

6.

En el constructor de pantalla, invoque add() para agregar LabelField a la pantalla.


add(helloWorld);

Ejemplo de cdigo: instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application
import net.rim.device.api.system.*; import net.rim.device.api.ui.*; import net.rim.device.api.ui.container.*; import net.rim.device.api.ui.component.*; import java.util.*; public class FontLoadingDemo extends UiApplication { public static void main(String[] args) { FontLoadingDemo app = new FontLoadingDemo(); app.enterEventDispatcher(); } public FontLoadingDemo() { pushScreen(new FontLoadingDemoScreen()); } }

148

Gua de desarrollo

Ejemplo de cdigo: instalar y utilizar una fuente personalizada en una aplicacin BlackBerry Java Application

class FontLoadingDemoScreen extends MainScreen { public FontLoadingDemoScreen() { setTitle("Font Loading Demo"); LabelField helloWorld = new LabelField("Hello World"); if (FontManager.getInstance().load("Myfont.ttf", "MyFont", FontManager.APPLICATION_FONT) == FontManager.SUCCESS) { try { FontFamily typeface = FontFamily.forName("MyFont"); Font myFont = typeface.getFont(Font.PLAIN, 50); helloWorld.setFont(myFont); } catch (ClassNotFoundException e) { System.out.println(e.getMessage()); } } add(helloWorld); } }

149

Gua de desarrollo

Verificacin ortogrfica

Verificacin ortogrfica

12

Puede utilizar los elementos en el paquete net.rim.blackberry.api.spellcheck para agregar la funcionalidad de corrector ortogrfico a una aplicacin. La interfaz SpellCheckEngine permite a una aplicacin verificar la ortografa de un valor de campo de la interfaz de usuario y proporcionar al usuario del dispositivo BlackBerry opciones para la verificacin ortogrfica. La interfaz SpellCheckUI permite a una aplicacin proporcionar una interfaz de usuario que posibilitar al usuario de un dispositivo BlackBerry resolver un problema de ortografa interactuando con la implementacin de SpellCheckEngine. Para obtener ms informacin acerca de cmo utilizar la API de comprobacin ortogrfica, consulte la aplicacin de ejemplo de verificacin ortogrfica, proporcionada con BlackBerry Java Development Environment 4.3.1 o posterior y con BlackBerry Java Plug-in para Eclipse.

Agregar la funcionalidad de verificacin ortogrfica


1. Importe las siguientes clases: net.rim.blackberry.api.spellcheck.SpellCheckEngineFactory java.lang.StringBuffer Importe las siguientes interfaces: net.rim.blackberry.api.spellcheck.SpellCheckEngine net.rim.blackberry.api.spellcheck.SpellCheckUI net.rim.blackberry.api.spellcheck.SpellCheckUIListener Cree las variables para los objetos de verificacin ortogrfica.
SpellCheckEngine _spellCheckEngine; SpellCheckUI _spellCheckUI;

2.

3.

4. 5.

Invoque createSpellCheckUI().
_spellCheckUI = SpellCheckEngineFactory.createSpellCheckUI();

Para notificar a una aplicacin cundo debe ocurrir un evento de verificacin ortogrfica, invoque addSpellCheckUIListener() con un objeto SpellCheckUIListener como parmetro.
_spellCheckUI.addSpellCheckUIListener(new SpellCheckUIListener());

6.

Para permitir a las aplicaciones verificar la ortografa de los campos de la interfaz de usuario y sugerir correcciones ortogrficas para un dispositivo BlackBerry, obtenga un objeto SpellCheckEngine e invoque getSpellCheckEngine().
_spellCheckEngine = _spellCheckUI.getSpellCheckEngine();

7.

Para utilizar la correccin de una palabra mal escrita, invoque SpellCheckEngine.learnCorrection(). Utilice los parmetros new StringBuffer(text), new StringBuffer(correction), donde text representa la palabra escrita mal y correction representa la palabra correcta.
_spellCheckEngine.learnCorrection(new StringBuffer(text), new StringBuffer (correction));

150

Gua de desarrollo

Escuchar un evento de verificacin ortogrfica

8.

(), con field como parmetro.

Para realizar las operaciones de verificacin ortogrfica en un campo, invoque SpellCheckUI.spellCheck


_spellCheckUI.spellCheck(field);

9.

Para aceptar una palabra mal escrita como deletreada correctamente, invoque SpellCheckEngine.learnWord() con la palabra que se va a aprender como parmetro.
_spellCheckEngine.learnWord(new StringBuffer(word));

Escuchar un evento de verificacin ortogrfica


1. Importe las siguientes clases: java.lang.StringBuffer net.rim.device.api.ui.UiApplication net.rim.device.api.ui.Field Importe las siguientes interfaces: net.rim.blackberry.api.spellcheck.SpellCheckUIListener net.rim.blackberry.api.spellcheck.SpellCheckEngine Cree un mtodo que devuelva la constante SpellCheckUIListener.LEARNING_ACCEPT cuando el valor SpellCheckEngine aprenda una palabra nueva.
public int wordLearned(SpellCheckUI ui, StringBuffer word) { UiApplication.getUiApplication().invokeLater(new popUpRunner("Word learned")); return SpellCheckUIListener.LEARNING_ACCEPT; }

2.

3.

4.

Cree un mtodo que devuelva la constante SpellCheckUIListener.LEARNING_ACCEPT cuando el valor SpellCheckEngine aprenda una correccin de la palabra.
public int wordCorrectionLearned(SpellCheckUI ui, StringBuffer word, StringBuffer correction){ UiApplication.getUiApplication().invokeLater(new popUpRunner("Correction learned")); return SpellCheckUIListener.LEARNING_ACCEPT; }

5.

Cree un mtodo que devuelva la constante SpellCheckUIListener.ACTION_OPEN_UI cuando el valor SpellCheckEngine encuentre una palabra escrita de forma incorrecta.
public int misspelledWordFound(SpellCheckUI ui, Field field, int offset, int len){ UiApplication.getUiApplication().invokeLater(new popUpRunner("Misspelled word found")); return SpellCheckUIListener.ACTION_OPEN_UI; }

151

Gua de desarrollo

Recursos relacionados

Recursos relacionados

13

www.blackberry.com/go/apiref: vea la ltima versin de la referencia de la API para BlackBerry Java SDK. www.blackberry.com/go/devguides: encuentre las guas de desarrollo, notas de la versin y las descripciones generales de la aplicacin de ejemplo para BlackBerry Java SDK. www.blackberry.com/developers: visite BlackBerry Developer Zone si desea conocer recursos acerca del desarrollo de aplicaciones del dispositivo BlackBerry. www.blackberry.com/go/developerkb: consulte los artculos de la base de conocimientos para desarrolladores de BlackBerry. www.blackberry.com/developers/downloads: encuentre las ltimas herramientas de desarrollo y descargas para desarrollar aplicaciones de dispositivos BlackBerry.

152

Gua de desarrollo

Glosario

Glosario
3-D tridimensional API Application Programming Interface (Interfaz de programacin de aplicaciones) JVM Java Virtual Machine MIDP Perfil de dispositivo mvil de informacin (Mobile Information Device Profile)

14

153

Gua de desarrollo

Comentarios

Comentarios
Para ofrecer comentarios acerca de esta entrega, visite www.blackberry.com/docsfeedback.

15

154

Gua de desarrollo

Historial de revisin del documento

Historial de revisin del documento


Fecha 16 de agosto de 2010 3 de agosto de 2010 Descripcin Se elimin el tema siguiente: Crear un indicador de progreso Se agregaron los temas siguientes:

16

Acceder a una imagen cifrada a travs de un flujo de entrada Acerca de la colocacin de elementos en los mens emergentes Prctica recomendada: implementar mens emergentes Prctica recomendada: implementar submens API de marco de comandos Crear un men emergente Crear un men emergente Crear un submen Mostrar una etiqueta en una posicin absoluta en la pantalla Mostrar una imagen cifrada Mostrar una imagen acercndola, alejndola y desplazndola Mostrar una fila de imgenes para realizar desplazamientos Mostrar un campo en una posicin absoluta en la pantalla Visualizacin de una imagen acercndola, alejndola y desplazndola Visualizacin de una fila de imgenes para realizar desplazamientos Activar los gestos para pellizcar Activar los deslizamientos que los usuarios realizan en el panel tctil Cifrar una imagen Imgenes Indicar actividad Indicar progreso Indicar el progreso de la actividad o de la tarea Gestos de pellizco Mens emergentes Especificar el modo de descodificacin de una imagen Especificar el tamao de la pantalla de una imagen cifrada Submens Compatibilidad con los mens contextuales heredados Desplazamientos con paneles tctiles Modelos de interaccin con la pantalla tctil Utilizar un comando en una o ms aplicaciones

155

Gua de desarrollo

Historial de revisin del documento

Fecha

Descripcin Utilizar un comando con un componente de la interfaz de usuario Uso de imgenes cifradas

Se agregaron los siguientes ejemplos de cdigo: Ejemplo de cdigo: crear un men emergente Ejemplo de cdigo: crear un submen Ejemplo de cdigo: visualizar una fila de imgenes para realizar desplazamientos Ejemplo de cdigo: mostrar una etiqueta en una posicin absoluta en la pantalla Cdigo de ejemplo: visualizacin de una imagen acercndola, alejndola y desplazndola

Se cambiaron los temas siguientes: Indicadores de actividad e indicadores de progreso Botones Crear una interfaz de usuario que sea coherente con las interfaces de usuario estndar de BlackBerry Cuadros de dilogo Listas desplegables Listas y tablas Colectores Botones de opcin Buscar Casillas de seleccin numrica Campos de texto Vistas de rbol

Se eliminaron los siguientes temas: Agregar un icono a un elemento de men Agregar un icono a un elemento de men Ejemplo de cdigo: agregar un icono a un elemento de men

156

Gua de desarrollo

Aviso legal

Aviso legal

17

2010 Research In Motion Limited. Reservados todos los derechos. BlackBerry, RIM, Research In Motion y las marcas comerciales, nombres y logotipos relacionados son propiedad de Research In Motion Limited y estn registrados y/o se usan en EE. UU. y en diferentes pases del mundo. Eclipse es una marca comercial de Eclipse Foundation, Inc. Java es una marca comercial de Oracle America, Inc. TrueType es una marca comercial de Apple Inc. Todas las dems marcas comerciales son propiedad de sus respectivos propietarios. Esta documentacin, incluida cualquier documentacin que se incorpore mediante referencia como documento proporcionado o disponible en www.blackberry.com/go/docs, se proporciona o se pone a disposicin "TAL CUAL" y "SEGN SU DISPONIBILIDAD" sin ninguna condicin, responsabilidad o garanta de ningn tipo por Research In Motion Limited y sus empresas afiliadas ("RIM") y RIM no asume ninguna responsabilidad por los errores tipogrficos, tcnicos o cualquier otra imprecisin, error u omisin contenidos en esta documentacin. Con el fin de proteger la informacin confidencial y propia de RIM, as como los secretos comerciales, la presente documentacin describe algunos aspectos de la tecnologa de RIM en lneas generales. RIM se reserva el derecho a modificar peridicamente la informacin que contiene esta documentacin, si bien tampoco se compromete en modo alguno a proporcionar cambios, actualizaciones, ampliaciones o cualquier otro tipo de informacin que se pueda agregar a esta documentacin. Esta documentacin puede contener referencias a fuentes de informacin, hardware o software, productos o servicios, incluidos componentes y contenido como, por ejemplo, el contenido protegido por copyright y/o sitios Web de terceros (conjuntamente, los "Productos y servicios de terceros"). RIM no controla ni es responsable de ningn tipo de Productos y servicios de terceros, incluido, sin restricciones, el contenido, la exactitud, el cumplimiento de copyright, la compatibilidad, el rendimiento, la honradez, la legalidad, la decencia, los vnculos o cualquier otro aspecto de los Productos y servicios de terceros. La inclusin de una referencia a los Productos y servicios de terceros en esta documentacin no implica que RIM se haga responsable de dichos Productos y servicios de terceros o de dichos terceros en modo alguno. EXCEPTO EN LA MEDIDA EN QUE LO PROHBA ESPECFICAMENTE LA LEY DE SU JURISDICCIN, QUEDAN EXCLUIDAS POR LA PRESENTE TODAS LAS CONDICIONES, APROBACIONES O GARANTAS DE CUALQUIER TIPO, EXPLCITAS O IMPLCITAS, INCLUIDA, SIN NINGN TIPO DE LIMITACIN, CUALQUIER CONDICIN, APROBACIN, GARANTA, DECLARACIN DE GARANTA DE DURABILIDAD, IDONEIDAD PARA UN FIN O USO DETERMINADO, COMERCIABILIDAD, CALIDAD COMERCIAL, ESTADO DE NO INFRACCIN, CALIDAD SATISFACTORIA O TITULARIDAD, O QUE SE DERIVE DE UNA LEY O COSTUMBRE O UN CURSO DE LAS NEGOCIACIONES O USO DEL COMERCIO, O RELACIONADO CON LA DOCUMENTACIN O SU USO O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER SOFTWARE, HARDWARE, SERVICIO O CUALQUIER PRODUCTO O SERVICIO DE TERCEROS MENCIONADOS AQU. TAMBIN PODRA TENER OTROS DERECHOS QUE VARAN SEGN EL ESTADO O PROVINCIA. ES POSIBLE QUE ALGUNAS JURISDICCIONES NO PERMITAN LA EXCLUSIN O LA LIMITACIN DE GARANTAS IMPLCITAS Y CONDICIONES. EN LA MEDIDA EN QUE LO PERMITA LA LEY, CUALQUIER GARANTA IMPLCITA O CONDICIONES EN RELACIN CON LA DOCUMENTACIN NO SE PUEDEN EXCLUIR TAL Y COMO SE HA EXPUESTO ANTERIORMENTE, PERO PUEDEN SER LIMITADAS, Y POR LA PRESENTE ESTN LIMITADAS A NOVENTA (90) DAS DESDE DE LA FECHA QUE ADQUIRI LA DOCUMENTACIN O EL ELEMENTO QUE ES SUJETO DE LA RECLAMACIN.

157

Gua de desarrollo

Aviso legal

EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, EN NINGN CASO RIM ASUMIR RESPONSABILIDAD ALGUNA POR CUALQUIER TIPO DE DAOS RELACIONADOS CON ESTA DOCUMENTACIN O SU USO, O RENDIMIENTO O NO RENDIMIENTO DE CUALQUIER SOFTWARE, HARDWARE, SERVICIO O PRODUCTOS Y SERVICIOS DE TERCEROS AQU MENCIONADOS INCLUIDOS SIN NINGN TIPO DE LIMITACIN CUALQUIERA DE LOS SIGUIENTES DAOS: DIRECTOS, RESULTANTES, EJEMPLARES, INCIDENTALES, INDIRECTOS, ESPECIALES, PUNITIVOS O AGRAVADOS, DAOS POR PRDIDA DE BENEFICIOS O INGRESOS, IMPOSIBILIDAD DE CONSEGUIR LOS AHORROS ESPERADOS, INTERRUPCIN DE LA ACTIVIDAD COMERCIAL, PRDIDA DE INFORMACIN COMERCIAL, PRDIDA DE LA OPORTUNIDAD DE NEGOCIO O CORRUPCIN O PRDIDA DE DATOS, IMPOSIBILIDAD DE TRANSMITIR O RECIBIR CUALQUIER DATO, PROBLEMAS ASOCIADOS CON CUALQUIER APLICACIN QUE SE UTILICE JUNTO CON PRODUCTOS Y SERVICIOS DE RIM, COSTES DEBIDOS AL TIEMPO DE INACTIVIDAD, PRDIDA DE USO DE LOS PRODUCTOS Y SERVICIOS DE RIM O PARTE DE L O DE CUALQUIER SERVICIO DE USO, COSTE DE SERVICIOS SUSTITUTIVOS, COSTES DE COBERTURA, INSTALACIONES O SERVICIOS, COSTE DEL CAPITAL O CUALQUIER OTRA PRDIDA MONETARIA SIMILAR, TANTO SI DICHOS DAOS SE HAN PREVISTO O NO, Y AUNQUE SE HAYA AVISADO A RIM DE LA POSIBILIDAD DE DICHOS DAOS. EN LA MEDIDA MXIMA EN QUE LO PERMITA LA LEY DE SU JURISDICCIN, RIM NO TENDR NINGN OTRO TIPO DE OBLIGACIN O RESPONSABILIDAD CONTRACTUAL, EXTRACONTRACTUAL O CUALQUIER OTRA, INCLUIDA CUALQUIER RESPONSABILIDAD POR NEGLIGENCIA O RESPONSABILIDAD ESTRICTA. LAS LIMITACIONES, EXCLUSIONES Y DESCARGOS DE RESPONSABILIDAD SE APLICARN: (A) INDEPENDIENTEMENTE DE LA NATURALEZA DE LA CAUSA DE LA ACCIN, DEMANDA O ACCIN SUYA, INCLUIDA PERO NO LIMITADA AL INCUMPLIMIENTO DEL CONTRATO, NEGLIGENCIA, AGRAVIO, EXTRACONTRACTUAL, RESPONSABILIDAD ESTRICTA O CUALQUIER OTRA TEORA DEL DERECHO Y DEBERN SOBREVIVIR A UNO O MS INCUMPLIMIENTOS ESENCIALES O AL INCUMPLIMIENTO DEL PROPSITO ESENCIAL DE ESTE CONTRATO O CUALQUIER SOLUCIN CONTENIDA AQU; Y (B) A RIM Y A SUS EMPRESAS AFILIADAS, SUS SUCESORES, CESIONARIOS, AGENTES, PROVEEDORES (INCLUIDOS LOS PROVEEDORES DE SERVICIOS DE USO), DISTRIBUIDORES AUTORIZADOS POR RIM (INCLUIDOS TAMBIN LOS PROVEEDORES DE SERVICIOS DE USO) Y SUS RESPECTIVOS DIRECTORES, EMPLEADOS Y CONTRATISTAS INDEPENDIENTES. ADEMS DE LAS LIMITACIONES Y EXCLUSIONES MENCIONADAS ANTERIORMENTE, EN NINGN CASO NINGN DIRECTOR, EMPLEADO, AGENTE, DISTRIBUIDOR, PROVEEDOR, CONTRATISTA INDEPENDIENTE DE RIM O CUALQUIER AFILIADO DE RIM ASUMIR NINGUNA RESPONSABILIDAD DERIVADA DE O RELACIONADA CON LA DOCUMENTACIN. Antes de instalar, usar o suscribirse a cualquiera de los Productos y servicios de terceros, es su responsabilidad asegurarse de que su proveedor de servicios de uso ofrezca compatibilidad con todas sus funciones. Puede que algunos proveedores de servicios de uso no ofrezcan las funciones de exploracin de Internet con una suscripcin al servicio BlackBerry Internet Service. Consulte con su proveedor de servicios acerca de la disponibilidad, arreglos de itinerancia, planes de servicio y funciones. La instalacin o el uso de los Productos y servicios de terceros con productos y servicios de RIM puede precisar la obtencin de una o ms patentes, marcas comerciales, derechos de autor u otras licencias para evitar que se vulneren o violen derechos de terceros. Usted es el nico responsable de determinar si desea utilizar Productos y servicios de terceros y si se necesita para ello cualquier otra licencia de terceros. En caso de necesitarlas, usted es el nico responsable de su adquisicin. No instale o utilice Productos y servicios de terceros hasta que se hayan adquirido todas las licencias necesarias. Cualquier tipo de Productos y servicios de terceros que se proporcione con los productos y servicios de RIM se le facilita para su comodidad "TAL CUAL" sin ninguna condicin expresa e implcita, aprobacin, garanta de cualquier tipo por RIM y RIM no sume
158

Gua de desarrollo

Aviso legal

ninguna responsabilidad en relacin con ello. El uso de los Productos y servicios de terceros se regir y estar sujeto a la aceptacin de los trminos de licencias independientes aplicables en este caso con terceros, excepto en los casos cubiertos expresamente por una licencia u otro acuerdo con RIM. Algunas funciones mencionadas en esta documentacin requieren una versin mnima del software de BlackBerry Enterprise Server, BlackBerry Desktop Software y/o BlackBerry Device Software. Los trminos de uso de cualquier producto o servicio de RIM se presentan en una licencia independiente o en otro acuerdo con RIM que se aplica en este caso. NINGUNA PARTE DE LA PRESENTE DOCUMENTACIN EST PENSADA PARA PREVALECER SOBRE CUALQUIER ACUERDO EXPRESO POR ESCRITO O GARANTA PROPORCIONADA POR RIM PARA PARTES DE CUALQUIER PRODUCTO O SERVICIO DE RIM QUE NO SEA ESTA DOCUMENTACIN.

Research In Motion Limited 295 Phillip Street Waterloo, ON N2L 3W8 Canad Research In Motion UK Limited Centrum House 36 Station Road Egham, Surrey TW20 9LF Reino Unido Publicado en Canad

159

También podría gustarte