• Dica de Xamarin.Forms - Personalizando por plataforma em XAML

    10 de Janeiro de 2018

O Xamarin.Forms permite personalizar os componentes de acordo com a plataforma em que a interface esta sendo renderizada. Isso é feito usando a tag <OnPlatform x:TypeArguments="[Tipo]">, onde o atributo x:TypeArguments determina o tipo de dado que estamos personalizando.

Por exemplo, é possível determinar o tamanho de um botão de acordo com a plataforma usando a sintaxe:

Também é possível definir mais de uma plataforma em uma condição, separando os nomes por virgula, como exemplificado abaixo:

Nota: O intellisense do Visual Studio for Mac não reconhece direito essa construção, por isso não estranhe se as opções não aparecem a medida que você digita.
No code-behind também é possível verificar a plataforma para executar códigos persoanlizados usando um Switch:

 

Essa sintaxe foi introduzida Xamarin.Forms 2.3.4, com o objetivo de facilitar a entrada das novas plataformas que estão sendo suportadas pelo Forms (macOS, Tizen, tvOS, etc.), já que usamos uma string para descreve-la e não mais uma enumeração. Ela facilita por um lado mas acabamos perdendo duas construções que eram bastante úteis:

  • public static T Device.OnPlatform<T>(T iOS, T Android, T WinPhone);, que permitia personalizar o retorno de um valor por plataforma facilmente e;
  • public static void Device.OnPlatform(Action iOS = null, Action Android = null, Action WinPhone = null, Action Default = null); que permitia executar uma ação específica de acordo com a plataforma.

Tomei a liberdade de re-criar essas funções com recursos modernos do C# 7.0. Usando tuplas podemos declarar um método OnPlatform para retornar valores da seguinte forma:

Esse método recebe um valor padrão que é retornado quando o app esta rodando em uma plataforma não listada, e uma lista de tuplas que representa o nome da plataforma e o valor associado a ela. O uso dela seria semelhante a esse:

Mais simples do que um Switch certo? Podemos fazer o mesmo para resgatar o OnPlatform que executa um Action por plataform:

E podemos usar esse método por exemplo para chamar ações específicas para cada plataforma:

Você pode incluir esses dois métodos em uma classe utilitário para facilitar seu dia-a-dia com o Xamarin.Forms.

Referências

Share

Desenvolvedor de aplicações, administrador de bancos de dados e gerente de projetos em uma ampla variedade de aplicativos de negócios, utilizando modernas metodologias e ferramentas de ALM e processos Agile. Me considero um entusiasta em tecnologia, com mais de 10 anos de experiência nesse mercado. Atualmente voltado para o mercado mobile, me especializei no desenvolvimento de aplicações para as principais plataformas do mercado (Android, iOS e Windows Phone), e em organizar e ministrar de treinamentos para desenvolvedores.

Leia também

Xamarin.Forms 2.3.4 Lançado
Xamarin
12 de Abril de 2017

Xamarin.Forms 2.3.4 Lançado

Depois de quase 4 meses de desenvolvimento, finalmente a Microsoft lançou a versão 2.3.4 do Xamarin.Forms. Parece bastante tempo para um “dot release”, mas trata-se de uma atualização bastante significativa, especialmente do ponto de vista de estabilidade. O que há de novo? De acordo com a documentação oficial, a atualização traz as seguintes novidades: Melhoria […]

LEIA MAIS
Xamarin.Forms ListView – Agrupando Células
Xamarin
12 de setembro de 2016

Xamarin.Forms ListView – Agrupando Células

No primeiro artigo dessa série sobre o controle ListView do Xamarin.Forms, aprendemos como criar o cabeçalho e o rodapé da listagem. Nessa sequência vamos entender como podemos agrupar as células de nosso ListView criando uma um nível de hierarquia que facilita a interação com a listagem. Vamos continuar evoluindo o projeto My Contacts, de forma […]

LEIA MAIS
Xamarin.Forms ListView – Cabeçalhos e Rodapés
Xamarin
14 de junho de 2016

Xamarin.Forms ListView – Cabeçalhos e Rodapés

O Controle ListView do Xamarin.Forms nos permite criar listagens homogeneas com uma célula por linha, sendo um dos seu componentes mais versáteis e completos. Além de renderizar células você também pode incluir um cabeçalho e um rodapé personalizados que aparecem antes da primeira célula e após a última célula respectivamente e participam da rolagem. Para […]

LEIA MAIS

Comentários