SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
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.
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)
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.
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.
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.
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

Similar a Topicos Selectos de Xamarin

Salesforce Lightning Components
Salesforce Lightning ComponentsSalesforce Lightning Components
Salesforce Lightning ComponentsDavid Carnicer
 
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdfIntroduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdfEliasChoque14
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Androidmcanalesc94
 
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...Luis Beltran
 
Symfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony FrameworkSymfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony Frameworkexcedesoft
 
Semana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxSemana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxErickCarlos14
 
Xamarin Fest DevOps
Xamarin Fest DevOpsXamarin Fest DevOps
Xamarin Fest DevOpsjuanmdura
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño IIkaolong
 
Líneas de productos de software y método watch
Líneas de productos de software y método watchLíneas de productos de software y método watch
Líneas de productos de software y método watchAriagna Acevedo
 
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...TestingUy
 
Non Funtional Testing con Xamarin Test Cloud
Non Funtional Testing con Xamarin Test CloudNon Funtional Testing con Xamarin Test Cloud
Non Funtional Testing con Xamarin Test CloudSantiago Matalonga
 
Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersJavier Suárez Ruiz
 
Introducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLIntroducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLSorey García
 
Analizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsAnalizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsJavier Suárez Ruiz
 
Aplicaciones Móviles Híbridas
Aplicaciones Móviles HíbridasAplicaciones Móviles Híbridas
Aplicaciones Móviles HíbridasScio Consulting
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Motorola Mobility - MOTODEV
 

Similar a Topicos Selectos de Xamarin (20)

Salesforce Lightning Components
Salesforce Lightning ComponentsSalesforce Lightning Components
Salesforce Lightning Components
 
Custom Renders Xamarin.Forms
Custom Renders Xamarin.FormsCustom Renders Xamarin.Forms
Custom Renders Xamarin.Forms
 
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdfIntroduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
Introduccion-a-Xamarin-y-Xamarin.Forms_1.pdf
 
Introducción a Android
Introducción a AndroidIntroducción a Android
Introducción a Android
 
JS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World ExampleJS Patterns Applied to a Real World Example
JS Patterns Applied to a Real World Example
 
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
 
Symfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony FrameworkSymfony-Community: Introducción a Symfony Framework
Symfony-Community: Introducción a Symfony Framework
 
DotNetDom: El futuro de Xamarin
DotNetDom: El futuro de XamarinDotNetDom: El futuro de Xamarin
DotNetDom: El futuro de Xamarin
 
Semana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptxSemana 02 Aplicacion Movil.pptx
Semana 02 Aplicacion Movil.pptx
 
Xamarin Fest DevOps
Xamarin Fest DevOpsXamarin Fest DevOps
Xamarin Fest DevOps
 
Patrones de diseño II
Patrones de diseño IIPatrones de diseño II
Patrones de diseño II
 
Líneas de productos de software y método watch
Líneas de productos de software y método watchLíneas de productos de software y método watch
Líneas de productos de software y método watch
 
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...
Taller evento TestingUY 2017 - Automatización de pruebas no funcionales con X...
 
Non Funtional Testing con Xamarin Test Cloud
Non Funtional Testing con Xamarin Test CloudNon Funtional Testing con Xamarin Test Cloud
Non Funtional Testing con Xamarin Test Cloud
 
Extendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom RendersExtendiendo Xamarin.Forms con Custom Renders
Extendiendo Xamarin.Forms con Custom Renders
 
Metodo watch
Metodo watchMetodo watch
Metodo watch
 
Introducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAMLIntroducción a Xamarin Forms con XAML
Introducción a Xamarin Forms con XAML
 
Analizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.FormsAnalizando interfaces de usuario avanzadas con Xamarin.Forms
Analizando interfaces de usuario avanzadas con Xamarin.Forms
 
Aplicaciones Móviles Híbridas
Aplicaciones Móviles HíbridasAplicaciones Móviles Híbridas
Aplicaciones Móviles Híbridas
 
Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas Cómo agregar calidad a sus aplicaciones mediante pruebas
Cómo agregar calidad a sus aplicaciones mediante pruebas
 

Más de Luis Beltran

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

Más de Luis Beltran (20)

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

Último

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 

Último (20)

El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 

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.
  • 8.
  • 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)
  • 10.
  • 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.
  • 18.
  • 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.
  • 28.
  • 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.
  • 45.
  • 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!