SlideShare una empresa de Scribd logo
Tópicos Selectos de Xamarin
Dependency Service, Custom Renderer, Effects y Styles
Luis Beltrán
@darkicebeam
luis@luisbeltran.mx
luis.beltran@itcelaya.edu.mx
• Mexicano
• Microsoft MVP en Developer Technologies
• Xamarin Certified Mobile Developer
• Estudiante de doctorado en la Universidad
Tomas Bata en Zlin (República Checa)
• Docente en el Tecnológico Nacional de México
en Celaya.
luisbeltran.mx
Luis Beltrán
• Xamarin.Forms es una plataforma increíble para crear aplicaciones
móviles que funcionan en Android, iOS y Windows.
• De una manera ágil y dinámica, utilizamos un solo lenguaje para la
funcionalidad (C#) y para el diseño (XAML, o también C#) de manera
tal que el código de la lógica es compartido por los proyectos y los
elementos visuales se mapean a elementos nativos y
comportamientos propios de cada plataforma.
• ¿Podemos extender Xamarin.Forms en caso de ser necesario? Las
necesidades de extensión incluyen:
• Modificar aspectos de la UI.
• Aprovechar a fondo las capacidades que nos ofrece cada plataforma.
• Crear nuevos controles o páginas.
Dependency Service
Accediendo a funcionalidad nativa con Xamarin.Forms
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/
• Cada plataforma expone funcionalidad importante (y en ocasiones
crítica) que no es directamente accesible desde el API de alto nivel
en Forms. Por ejemplo:
• Acceso a la cámara
• Notificaciones locales
• Uso de sensores (GPS, batería, …)
• Etc.
• Conceptos como Dependency Injection y Dependency Service llegan
al rescate para extender la funcionalidad de nuestras apps móviles
desarrolladas en Xamarin.Forms ☺
Justificación
Dependency Service
• Es una técnica que permite a las
apps acceder a funcionalidad
específica de plataforma desde el
código compartido.
• De esta manera, los desarrolladores
pueden crear apps que hagan todo
lo que una app nativa puede hacer
exponiendo un servicio que
encuentra una implementación
específica de una interfaz.
¿Cómo funciona?
Se requieren 4 componentes para utilizar Dependency Service:
• Interfaz. La funcionalidad requerida es definida a través de una interfaz en el
proyecto de código compartido.
• Implementación por cada plataforma. Las clases que implementan la interfaz
deben ser agregadas en cada proyecto de plataforma.
• Registro. Cada clase implementada debe ser registrada con Dependency Service
a través de un atributo de metadatos. El registro permite a encontrar la clase a
implementar y suministrarla en lugar de la interfaz en tiempo de ejecución.
• Llamada al Dependency Service. El código compartido necesita llamar
explícitamente a Dependency Service para preguntar por implementaciones de
la interfaz.
Topicos Selectos de Xamarin
1) Interfaz (en el código compartido)
2) Implementación
(proyecto de Android)
3) Registro (atributo en el namespace)
4) Llamada (en el código compartido)
Topicos Selectos de Xamarin
2) Implementación (proyecto de iOS)
3) Registro (atributo en el namespace)
2) Implementación
(proyecto de UWP)
3) Registro (atributo en el namespace y
en App.xaml.cs después de Forms.Init)
Demo
https://github.com/icebeam7/DirectorioTecNMCelaya
Custom Renderers
Personalización de la apariencia y comportamiento de controles en cada plataforma
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/
Justificación
• Las interfaces de usuario en Xamarin.Forms son renderizadas
utilizando los controles nativos de cada plataforma, de manera que
las apps retienen una apariencia y experiencia de usuario natural
(look & feel).
Justificación
• En ocasiones, sin embargo, se necesita personalizar la apariencia y el
comportamiento de la interfaz de usuario por ejemplo para
incrementar la funcionalidad de algún control o estandarizar el
diseño de la UI en las diferentes plataformas.
• Custom Renderers permite sobrescribir el proceso predeterminado
de renderizado de la UI realizado por Xamarin.Forms para diseñar
controles personalizados en cada plataforma.
Custom Renderer
• Es una extensión de Xamarin.Forms con la
cual los desarrolladores pueden implementar
sus propias clases Renderer personalizadas
para individualizar la apariencia y/o el
comportamiento de un control.
• Utilizarlos permite sacar mejor provecho a
las mejoras y personalizaciones que ofrece
cada plataforma de manera específica.
¿Cómo funciona?
Para utilizar Custom Renderers se requieren 4 componentes:
• En el código compartido se crea un nuevo control Xamarin.Forms derivado de:
• Un control existente
• View (si es un nuevo tipo de control)
• Por cada plataforma se crea un view renderer donde se sobrescribe el evento
OnElementChanged. Utiliza:
• Un renderer existente como clase base para personalizar un control ya existente
• ViewRenderer<TView, TNative> (para crear un nuevo estilo de control).
• Asociar el renderer al control a través del atributo [ExportRenderer]
• Utilizar el control personalizado en el código de proyecto compartido.
Topicos Selectos de Xamarin
1) Nuevo control (en el código compartido)
2) Renderer (proyecto de iOS)
3) Asociación (atributo en el namespace)
4) Uso (en el código compartido)
2) Renderer (proyecto de Android)
3) Asociación (atributo en el namespace)
2) Renderer (proyecto de UWP)
3) Asociación (atributo en el namespace)
OnElementChanged
• Element proporciona una referencia al nivel del control de
Xamarin.Forms.
• NewElement contiene una referencia al control de Xamarin.Forms
• OldElement contiene una referencia al renderer asociado al control de
Xamarin.Forms
• Control proporciona un enlace al nivel de controles nativos. Sus
propiedades son las que se “inyectan” con los nuevos valores.
Demo
Effects
Una manera ligera de personalizar la apariencia de controles por plataforma
Justificación
• Implementar un Custom Renderer para realizar un cambio muy
simple al personalizar el diseño de un control es con frecuencia una
tarea que puede impactar el tiempo de respuesta de una UI.
• Cuando se desea implementar cambios sencillos en los estilos de un
control a través de las diversas plataformas se recomienda utilizar
Effects debido a que simplifican el proceso de implementación y el
tiempo de carga de la UI se ve beneficiado.
Effects
• Los Effects permiten personalizar la
apariencia de un control nativo sin la
necesidad de implementar un Custom
Renderer, simplificando el proceso.
• Normalmente son utilizados para realizar
pequeños cambios en los estilos de un
control.
• Además, son reutilizables y pueden ser
parametrizados y así aumentar su nivel de
reutilización.
Effects
• Todo lo que se puede lograr con un Effect también se puede
implementar a través de un Custom Renderer, si bien estos últimos
ofrecen más flexibilidad y configuración.
• Los Custom Renderers son ideales cuando se desea personalizar de
forma profunda la UI en cada plataforma.
¿Cómo funciona?
Para utilizar Effects se requieren 2 componentes:
• Crear un efecto en cada plataforma objetivo a través de una clase que hereda de
PlatformEffect. Se sobrescriben 2 métodos:
• OnAttached: llamado cuando un efecto se adjunta a un control de Xamarin.Forms y aquí se
personaliza el control y se manejan excepciones en caso de que el efecto no se pueda aplicar
al elemento especificado.
• OnDetached: llamado cuando un efecto se separa de un control de Xamarin.Forms y aquí se
realiza la limpieza de efectos (por ejemplo, resetear valores o anular el registro del elemento
de un controlador de eventos).
• Registrar el efecto con los atributos ResolutionGroupName y ExportEffect
• Consumir el efecto adjuntándolo en el control de Xamarin.Forms apropiado en el
proyecto compartido.
Topicos Selectos de Xamarin
1) Efecto (proyecto de Android)
2) Registro (atributos en el namespace)
1) Efecto (proyecto de iOS)
4) Consumo (proyecto compartido)
1) Efecto (proyecto de UWP)
2) Registro (atributos en el namespace)
Demo
Styles
Justificación
• Con frecuencia, las aplicaciones de Xamarin.Forms contienen múltiples
controles que deben tener una apariencia idéntica a lo largo de la app.
• Configurar la apariencia de cada control de forma individual es una
tarea repetitiva y propensa a errores.
• Definiendo un Style es posible personalizar la apariencia de la UI
agrupando y configurando las propiedades disponibles en los diversos
tipos de control visual.
Styles
• Permiten personalizar la apariencia de los
elementos visuales. Se definen para un tipo
específico y contienen valores para las
propiedades disponibles en ese tipo.
• La clase Style agrupa una colección de
valores de propiedad en un objeto que luego
puede aplicarse a múltiples instancias de
elementos visuales, reduciendo la repetición
de código XAML (o de C#) y simplificando el
cambio de apariencia en una app móvil.
• Las instancias Style creadas en XAML se definen típicamente en un
ResourceDictionary que es asignado a la colección de Resources de
un control, página o a la colección Resources de la aplicación.
• Las instancias Style creadas en C# se definen típicamente en la clase
de la página o en una clase accesible globalmente.
• La ubicación de un estilo define su alcance:
• Los estilos definidos a nivel de control sólo se aplican al control y a sus
elementos secundarios (children).
• Los estilos definidos a nivel de página sólo se aplican a la página y a sus
elementos secundarios (children).
• Los estilos definidos a nivel de aplicación se aplican en toda la aplicación.
• Al definir un Style siempre se debe especificar un TargetType, que no es
otra cosa más que el control al cual se aplicará el estilo.
• Cada instancia de Style contiene una colección de uno o más objetos
Setter, cada uno de los cuales contiene un Property y un Value asignado.
• La Property es el nombre de una propiedad enlazable al elemento del cual
se está aplicando el estilo, mientras que el Value es el valor aplicado a la
propiedad.
• Para aplicar un estilo previamente creado, se asigna la propiedad Style de
un control.
• Los estilos inferiores en la jerarquía de vistas tienen prioridad sobre
aquellos definidos en una capa superior.
• Por ejemplo, configurar un estilo que establece Label.TextColor en Red a
nivel de aplicación será anulado por un estilo a nivel de página que
establece Label.TextColor en Green.
• De manera similar, un estilo a nivel de página será reemplazado por un
estilo a nivel de control.
• Además, asignar directamente un valor para TextColor en el control Label
tendrá prioridad sobre cualquier estilo.
¿Qué opciones hay para definir estilos?
Existen varios tipos de estilos disponibles en Xamarin.Forms:
• Estilos explícitos
• Estilos implícitos
• Estilos globales
• Estilos heredados
• Estilos dinámicos
• Estilos de dispositivo
Estilos explícitos
• Son estilos aplicados selectivamente a un control a
través del atributo x:Key.
Estilos implícitos
• Son estilos utilizados por todos los controles con el
mismo TargetType, por lo que no se require que
cada control haga referencia al estilo.
Estilos globales
• Son estilos definidos en el diccionario de recursos
de la aplicación, lo que los hace accesibles a toda la
app y evitando duplicidad de estilos a lo largo de las
páginas o controles.
Estilos heredados
• Los estilos son capaces de reutilizar otros estilos a
través de la herencia para definir una apariencia
más personalizada a través del atributo BasedOn.
Cadena de Herencia:
• Un estilo solo puede heredarse de estilos en el mismo nivel o superior
en la jerarquía de vistas. Esto significa que:
• Un recurso de nivel de aplicación solo puede heredar de otros recursos de
nivel de aplicación.
• Un recurso de nivel de página puede heredar de los recursos de nivel de
aplicación y otros recursos de nivel de página.
• Un recurso de nivel de control puede heredar de recursos de nivel de
aplicación, recursos de nivel de página y otros recursos de nivel de control.
Estilos dinámicos
• De forma predeterminada, los estilos no
responden a los cambios en los valores
de las propiedades y permanecen
estáticos durante la ejecución de una
app. Esta limitación se puede eliminar a
través de los recursos dinámicos.
Topicos Selectos de Xamarin
Estilos de dispositivo
• Xamarin.Forms incluye 6 estilos dinámicos
conocidos como estilos de dispositivo en la clase
Device.Styles. Sólo son aplicables a controles Label.
• BodyStyle
• CaptionStyle
• ListItemDetailTextStyle
• ListItemTextStyle
• SubtitleStyle
• TitleStyle
Demo
https://www.facebook.com/groups/xamarindiplomadoitc/
https://www.meetup.com/CelayaMobileDevelopers/
https://university.xamarin.com/
Tópicos Selectos de Xamarin
Dependency Service, Custom Renderer, Effects y Styles
Luis Beltrán
@darkicebeam
luis@luisbeltran.mx
luis.beltran@itcelaya.edu.mx
¡Muchas gracias por
tu atención!

Más contenido relacionado

PPT
12 MicroSoft SFIC 2009
PPTX
Extendiendo Xamarin.Forms
PDF
Custom Renders Xamarin.Forms
PPTX
Extendiendo Xamarin.Forms con Custom Renders
PPTX
Effects & Custom Renderers en Xamarin.Forms
PPTX
Custom Renderers Made Simple
PPTX
DevNights Xamarin: Custom Renderers
PPTX
Monkey Conf 2020: .NET MAUI Handlers
12 MicroSoft SFIC 2009
Extendiendo Xamarin.Forms
Custom Renders Xamarin.Forms
Extendiendo Xamarin.Forms con Custom Renders
Effects & Custom Renderers en Xamarin.Forms
Custom Renderers Made Simple
DevNights Xamarin: Custom Renderers
Monkey Conf 2020: .NET MAUI Handlers

Similar a Topicos Selectos de Xamarin (20)

PPTX
Novedades Xamarin.Forms 2
PPTX
DotNetDom: El futuro de Xamarin
PPTX
Creando controles para Xamarin.Forms
PPTX
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
PPTX
Semana 02 Aplicacion Movil.pptx
PPTX
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
PPTX
primera aplicacion Xamarin.pptx
PPTX
Taller Xamarin Monkey Conf 2018
PPTX
Intro to xamarin forms: converters, animations, behaviors and triggers
PPTX
.NET Day Guatemala
PPTX
Women Who Code Bogota: Introduction to Xamarin Forms
PPTX
Xamarin Dev Days Madrid - Xamarin.Forms
PPTX
OpenSouthCode 2018: Taller Xamarin
PDF
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
PPTX
Codemotion 2017 - Taller Xamarin
PPTX
DotNet 2019: Optimizando Apps con Xamarin.Forms
PPTX
DotNet 2019 | Javier Suarez - Optimizando Apps con Xamarin Forms
PPTX
dotNetMálaga - Taller Xamarin
PPTX
Semanahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Novedades Xamarin.Forms 2
DotNetDom: El futuro de Xamarin
Creando controles para Xamarin.Forms
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Semana 02 Aplicacion Movil.pptx
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
primera aplicacion Xamarin.pptx
Taller Xamarin Monkey Conf 2018
Intro to xamarin forms: converters, animations, behaviors and triggers
.NET Day Guatemala
Women Who Code Bogota: Introduction to Xamarin Forms
Xamarin Dev Days Madrid - Xamarin.Forms
OpenSouthCode 2018: Taller Xamarin
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
Codemotion 2017 - Taller Xamarin
DotNet 2019: Optimizando Apps con Xamarin.Forms
DotNet 2019 | Javier Suarez - Optimizando Apps con Xamarin Forms
dotNetMálaga - Taller Xamarin
Semanahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Publicidad

Más de Luis Beltran (20)

PPTX
AI for Accessibility.pptx
PPTX
NET Conf Bhubaneswar - Migrating your Xamarin.Forms app to .NET MAUI.pptx
PPTX
03 GlobalAIBootcamp2020Lisboa-Rock, Paper, Scissors.pptx
PPTX
BI LATAM Summit 2022 - Creación de soluciones de automatización serverless-...
PDF
CEIAAIT - Fundamentos y Aplicaciones de Deep Learning.pdf
PPTX
Computo en la Nube con Azure - AI Gaming Panama.pptx
PPTX
5StarsConf - Serverless Machine Learning con Azure Functions y ML.NET .pptx
PPTX
ACW - Azure Speaker Recognition Biometria de Voz.pptx
PPTX
UNICABA - Azure Machine Learning.pptx
PPTX
Azure Talks Bolivia - Aumente la confiabilidad de su negocio con Azure Anomal...
PPTX
Latino NET - Integrando WhatsApp en nuestras apps .NET con Twilio.pptx
PPTX
NOVA - Enriquecimiento de IA con Azure Cognitive Search.pptx
PPTX
Netcoreconf 2021 Realidad mixta en apps móviles con Azure Spatial Anchors y ...
PPTX
ATG Puebla - El cementerio de Microsoft.pptx
PPTX
Data-Saturday-10-Sofia-2021 Azure Video Indexer- Advanced data extraction fro...
PPTX
Azure Community Conference - Image Recognition in WhatsApp chatbot with Azure...
PPTX
Real NET Docs Show - Serverless Machine Learning v3.pptx
PPTX
Sesion 5 - Eficiencia del Rendimiento - Well Architected Backstage Tour.pptx
PPTX
XamarinExpertDay - Creating PDF files in mobile apps with PdfSharpCore and Mi...
PPTX
Latam Space Week - Clasificación de rocas espaciales por medio de IA.pptx
AI for Accessibility.pptx
NET Conf Bhubaneswar - Migrating your Xamarin.Forms app to .NET MAUI.pptx
03 GlobalAIBootcamp2020Lisboa-Rock, Paper, Scissors.pptx
BI LATAM Summit 2022 - Creación de soluciones de automatización serverless-...
CEIAAIT - Fundamentos y Aplicaciones de Deep Learning.pdf
Computo en la Nube con Azure - AI Gaming Panama.pptx
5StarsConf - Serverless Machine Learning con Azure Functions y ML.NET .pptx
ACW - Azure Speaker Recognition Biometria de Voz.pptx
UNICABA - Azure Machine Learning.pptx
Azure Talks Bolivia - Aumente la confiabilidad de su negocio con Azure Anomal...
Latino NET - Integrando WhatsApp en nuestras apps .NET con Twilio.pptx
NOVA - Enriquecimiento de IA con Azure Cognitive Search.pptx
Netcoreconf 2021 Realidad mixta en apps móviles con Azure Spatial Anchors y ...
ATG Puebla - El cementerio de Microsoft.pptx
Data-Saturday-10-Sofia-2021 Azure Video Indexer- Advanced data extraction fro...
Azure Community Conference - Image Recognition in WhatsApp chatbot with Azure...
Real NET Docs Show - Serverless Machine Learning v3.pptx
Sesion 5 - Eficiencia del Rendimiento - Well Architected Backstage Tour.pptx
XamarinExpertDay - Creating PDF files in mobile apps with PdfSharpCore and Mi...
Latam Space Week - Clasificación de rocas espaciales por medio de IA.pptx
Publicidad

Último (20)

PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PDF
taller de informática - LEY DE OHM
PDF
Estrategia de apoyo tecnología grado 9-3
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PPT
El-Gobierno-Electrónico-En-El-Estado-Bolivia
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Calidad desde el Docente y la mejora continua .pdf
PPTX
Power Point Nicolás Carrasco (disertación Roblox).pptx
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
REDES INFORMATICAS REDES INFORMATICAS.pptx
Propuesta BKP servidores con Acronis1.pptx
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Zarate Quispe Alex aldayir aplicaciones de internet .docx
taller de informática - LEY DE OHM
Estrategia de apoyo tecnología grado 9-3
Influencia-del-uso-de-redes-sociales.pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
El-Gobierno-Electrónico-En-El-Estado-Bolivia
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
Plantilla para Diseño de Narrativas Transmedia.pdf
Presentación PASANTIAS AuditorioOO..pptx
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
historia_web de la creacion de un navegador_presentacion.pptx
Liceo departamental MICRO BIT (1) 2.pdfbbbnn
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Calidad desde el Docente y la mejora continua .pdf
Power Point Nicolás Carrasco (disertación Roblox).pptx
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.

Topicos Selectos de Xamarin

  • 1. Tópicos Selectos de Xamarin Dependency Service, Custom Renderer, Effects y Styles Luis Beltrán @darkicebeam luis@luisbeltran.mx luis.beltran@itcelaya.edu.mx
  • 2. • Mexicano • Microsoft MVP en Developer Technologies • Xamarin Certified Mobile Developer • Estudiante de doctorado en la Universidad Tomas Bata en Zlin (República Checa) • Docente en el Tecnológico Nacional de México en Celaya. luisbeltran.mx Luis Beltrán
  • 3. • Xamarin.Forms es una plataforma increíble para crear aplicaciones móviles que funcionan en Android, iOS y Windows. • De una manera ágil y dinámica, utilizamos un solo lenguaje para la funcionalidad (C#) y para el diseño (XAML, o también C#) de manera tal que el código de la lógica es compartido por los proyectos y los elementos visuales se mapean a elementos nativos y comportamientos propios de cada plataforma. • ¿Podemos extender Xamarin.Forms en caso de ser necesario? Las necesidades de extensión incluyen: • Modificar aspectos de la UI. • Aprovechar a fondo las capacidades que nos ofrece cada plataforma. • Crear nuevos controles o páginas.
  • 4. Dependency Service Accediendo a funcionalidad nativa con Xamarin.Forms https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/dependency-service/
  • 5. • Cada plataforma expone funcionalidad importante (y en ocasiones crítica) que no es directamente accesible desde el API de alto nivel en Forms. Por ejemplo: • Acceso a la cámara • Notificaciones locales • Uso de sensores (GPS, batería, …) • Etc. • Conceptos como Dependency Injection y Dependency Service llegan al rescate para extender la funcionalidad de nuestras apps móviles desarrolladas en Xamarin.Forms ☺ Justificación
  • 6. Dependency Service • Es una técnica que permite a las apps acceder a funcionalidad específica de plataforma desde el código compartido. • De esta manera, los desarrolladores pueden crear apps que hagan todo lo que una app nativa puede hacer exponiendo un servicio que encuentra una implementación específica de una interfaz.
  • 7. ¿Cómo funciona? Se requieren 4 componentes para utilizar Dependency Service: • Interfaz. La funcionalidad requerida es definida a través de una interfaz en el proyecto de código compartido. • Implementación por cada plataforma. Las clases que implementan la interfaz deben ser agregadas en cada proyecto de plataforma. • Registro. Cada clase implementada debe ser registrada con Dependency Service a través de un atributo de metadatos. El registro permite a encontrar la clase a implementar y suministrarla en lugar de la interfaz en tiempo de ejecución. • Llamada al Dependency Service. El código compartido necesita llamar explícitamente a Dependency Service para preguntar por implementaciones de la interfaz.
  • 9. 1) Interfaz (en el código compartido) 2) Implementación (proyecto de Android) 3) Registro (atributo en el namespace) 4) Llamada (en el código compartido)
  • 11. 2) Implementación (proyecto de iOS) 3) Registro (atributo en el namespace) 2) Implementación (proyecto de UWP) 3) Registro (atributo en el namespace y en App.xaml.cs después de Forms.Init)
  • 13. Custom Renderers Personalización de la apariencia y comportamiento de controles en cada plataforma https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/
  • 14. Justificación • Las interfaces de usuario en Xamarin.Forms son renderizadas utilizando los controles nativos de cada plataforma, de manera que las apps retienen una apariencia y experiencia de usuario natural (look & feel).
  • 15. Justificación • En ocasiones, sin embargo, se necesita personalizar la apariencia y el comportamiento de la interfaz de usuario por ejemplo para incrementar la funcionalidad de algún control o estandarizar el diseño de la UI en las diferentes plataformas. • Custom Renderers permite sobrescribir el proceso predeterminado de renderizado de la UI realizado por Xamarin.Forms para diseñar controles personalizados en cada plataforma.
  • 16. Custom Renderer • Es una extensión de Xamarin.Forms con la cual los desarrolladores pueden implementar sus propias clases Renderer personalizadas para individualizar la apariencia y/o el comportamiento de un control. • Utilizarlos permite sacar mejor provecho a las mejoras y personalizaciones que ofrece cada plataforma de manera específica.
  • 17. ¿Cómo funciona? Para utilizar Custom Renderers se requieren 4 componentes: • En el código compartido se crea un nuevo control Xamarin.Forms derivado de: • Un control existente • View (si es un nuevo tipo de control) • Por cada plataforma se crea un view renderer donde se sobrescribe el evento OnElementChanged. Utiliza: • Un renderer existente como clase base para personalizar un control ya existente • ViewRenderer<TView, TNative> (para crear un nuevo estilo de control). • Asociar el renderer al control a través del atributo [ExportRenderer] • Utilizar el control personalizado en el código de proyecto compartido.
  • 19. 1) Nuevo control (en el código compartido) 2) Renderer (proyecto de iOS) 3) Asociación (atributo en el namespace) 4) Uso (en el código compartido)
  • 20. 2) Renderer (proyecto de Android) 3) Asociación (atributo en el namespace) 2) Renderer (proyecto de UWP) 3) Asociación (atributo en el namespace)
  • 21. OnElementChanged • Element proporciona una referencia al nivel del control de Xamarin.Forms. • NewElement contiene una referencia al control de Xamarin.Forms • OldElement contiene una referencia al renderer asociado al control de Xamarin.Forms • Control proporciona un enlace al nivel de controles nativos. Sus propiedades son las que se “inyectan” con los nuevos valores.
  • 22. Demo
  • 23. Effects Una manera ligera de personalizar la apariencia de controles por plataforma
  • 24. Justificación • Implementar un Custom Renderer para realizar un cambio muy simple al personalizar el diseño de un control es con frecuencia una tarea que puede impactar el tiempo de respuesta de una UI. • Cuando se desea implementar cambios sencillos en los estilos de un control a través de las diversas plataformas se recomienda utilizar Effects debido a que simplifican el proceso de implementación y el tiempo de carga de la UI se ve beneficiado.
  • 25. Effects • Los Effects permiten personalizar la apariencia de un control nativo sin la necesidad de implementar un Custom Renderer, simplificando el proceso. • Normalmente son utilizados para realizar pequeños cambios en los estilos de un control. • Además, son reutilizables y pueden ser parametrizados y así aumentar su nivel de reutilización.
  • 26. Effects • Todo lo que se puede lograr con un Effect también se puede implementar a través de un Custom Renderer, si bien estos últimos ofrecen más flexibilidad y configuración. • Los Custom Renderers son ideales cuando se desea personalizar de forma profunda la UI en cada plataforma.
  • 27. ¿Cómo funciona? Para utilizar Effects se requieren 2 componentes: • Crear un efecto en cada plataforma objetivo a través de una clase que hereda de PlatformEffect. Se sobrescriben 2 métodos: • OnAttached: llamado cuando un efecto se adjunta a un control de Xamarin.Forms y aquí se personaliza el control y se manejan excepciones en caso de que el efecto no se pueda aplicar al elemento especificado. • OnDetached: llamado cuando un efecto se separa de un control de Xamarin.Forms y aquí se realiza la limpieza de efectos (por ejemplo, resetear valores o anular el registro del elemento de un controlador de eventos). • Registrar el efecto con los atributos ResolutionGroupName y ExportEffect • Consumir el efecto adjuntándolo en el control de Xamarin.Forms apropiado en el proyecto compartido.
  • 29. 1) Efecto (proyecto de Android) 2) Registro (atributos en el namespace) 1) Efecto (proyecto de iOS) 4) Consumo (proyecto compartido)
  • 30. 1) Efecto (proyecto de UWP) 2) Registro (atributos en el namespace)
  • 31. Demo
  • 33. Justificación • Con frecuencia, las aplicaciones de Xamarin.Forms contienen múltiples controles que deben tener una apariencia idéntica a lo largo de la app. • Configurar la apariencia de cada control de forma individual es una tarea repetitiva y propensa a errores. • Definiendo un Style es posible personalizar la apariencia de la UI agrupando y configurando las propiedades disponibles en los diversos tipos de control visual.
  • 34. Styles • Permiten personalizar la apariencia de los elementos visuales. Se definen para un tipo específico y contienen valores para las propiedades disponibles en ese tipo. • La clase Style agrupa una colección de valores de propiedad en un objeto que luego puede aplicarse a múltiples instancias de elementos visuales, reduciendo la repetición de código XAML (o de C#) y simplificando el cambio de apariencia en una app móvil.
  • 35. • Las instancias Style creadas en XAML se definen típicamente en un ResourceDictionary que es asignado a la colección de Resources de un control, página o a la colección Resources de la aplicación. • Las instancias Style creadas en C# se definen típicamente en la clase de la página o en una clase accesible globalmente. • La ubicación de un estilo define su alcance: • Los estilos definidos a nivel de control sólo se aplican al control y a sus elementos secundarios (children). • Los estilos definidos a nivel de página sólo se aplican a la página y a sus elementos secundarios (children). • Los estilos definidos a nivel de aplicación se aplican en toda la aplicación.
  • 36. • Al definir un Style siempre se debe especificar un TargetType, que no es otra cosa más que el control al cual se aplicará el estilo. • Cada instancia de Style contiene una colección de uno o más objetos Setter, cada uno de los cuales contiene un Property y un Value asignado. • La Property es el nombre de una propiedad enlazable al elemento del cual se está aplicando el estilo, mientras que el Value es el valor aplicado a la propiedad. • Para aplicar un estilo previamente creado, se asigna la propiedad Style de un control.
  • 37. • Los estilos inferiores en la jerarquía de vistas tienen prioridad sobre aquellos definidos en una capa superior. • Por ejemplo, configurar un estilo que establece Label.TextColor en Red a nivel de aplicación será anulado por un estilo a nivel de página que establece Label.TextColor en Green. • De manera similar, un estilo a nivel de página será reemplazado por un estilo a nivel de control. • Además, asignar directamente un valor para TextColor en el control Label tendrá prioridad sobre cualquier estilo.
  • 38. ¿Qué opciones hay para definir estilos? Existen varios tipos de estilos disponibles en Xamarin.Forms: • Estilos explícitos • Estilos implícitos • Estilos globales • Estilos heredados • Estilos dinámicos • Estilos de dispositivo
  • 39. Estilos explícitos • Son estilos aplicados selectivamente a un control a través del atributo x:Key.
  • 40. Estilos implícitos • Son estilos utilizados por todos los controles con el mismo TargetType, por lo que no se require que cada control haga referencia al estilo.
  • 41. Estilos globales • Son estilos definidos en el diccionario de recursos de la aplicación, lo que los hace accesibles a toda la app y evitando duplicidad de estilos a lo largo de las páginas o controles.
  • 42. Estilos heredados • Los estilos son capaces de reutilizar otros estilos a través de la herencia para definir una apariencia más personalizada a través del atributo BasedOn.
  • 43. Cadena de Herencia: • Un estilo solo puede heredarse de estilos en el mismo nivel o superior en la jerarquía de vistas. Esto significa que: • Un recurso de nivel de aplicación solo puede heredar de otros recursos de nivel de aplicación. • Un recurso de nivel de página puede heredar de los recursos de nivel de aplicación y otros recursos de nivel de página. • Un recurso de nivel de control puede heredar de recursos de nivel de aplicación, recursos de nivel de página y otros recursos de nivel de control.
  • 44. Estilos dinámicos • De forma predeterminada, los estilos no responden a los cambios en los valores de las propiedades y permanecen estáticos durante la ejecución de una app. Esta limitación se puede eliminar a través de los recursos dinámicos.
  • 46. Estilos de dispositivo • Xamarin.Forms incluye 6 estilos dinámicos conocidos como estilos de dispositivo en la clase Device.Styles. Sólo son aplicables a controles Label. • BodyStyle • CaptionStyle • ListItemDetailTextStyle • ListItemTextStyle • SubtitleStyle • TitleStyle
  • 47. Demo
  • 49. Tópicos Selectos de Xamarin Dependency Service, Custom Renderer, Effects y Styles Luis Beltrán @darkicebeam luis@luisbeltran.mx luis.beltran@itcelaya.edu.mx ¡Muchas gracias por tu atención!