Xamarin Forms - Acessando APIs de plataforma específica
Neste artigo veremos como acessar recursos específicos de cada plataforma no Xamarin Forms. |
Para
poder criar aplicações para o mundo real você vai precisar acessar recursos
específicos de cada plataforma como sistema de arquivos, sensores, câmera, rede,
notificações, etc.
Cada sistema operacional gerencia esses recursos usando API nativas que não
podem ser compartilhadas entre as plataformas, e , desse modo, o Xamarin Forms
não pode mapear esses objetos entre as plataformas.
Então como podemos acessar APIs nativas no Xamarin Forms ? Seria isso possível ?
Felizmente o Xamarin Forms oferece várias maneiras de acessar APIs específicas de cada plataforma que você pode usar para acessar praticamente tudo de cada plataforma. Assim, não há limite para o que você pode fazer com Xamarin.Forms.
Para
acessar os recursos da plataforma, você precisará escrever código C# código em
cada projeto de cada plataforma.
A classe Device e o método
OnPlatform
O
namespace Xamarin.Forms expõe uma classe importante chamada Device
que permite detectar a plataforma na qual o seu aplicativo está sendo executado
e o idioma do dispositivo (tablet, telefone, área de trabalho).
Esta classe é particularmente útil quando você precisa ajustar a interface do
usuário com base na plataforma.
O código
a seguir demonstra como aproveitar a propriedade Device.RuntimePlatform
para detectar a plataforma em execução e para alterar a interface com UI
baseadas no valor obtido.
Vamos criar um projeto Xamarin Forms chamado XF_Device do tipo PCL e definir no arquivo MainPage o código XAML e o código C# conforme abaixo:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XF_Device"
x:Class="XF_Device.MainPage">
<ContentPage.Content>
<StackLayout>
<Label x:Name="Label1" Text="BemVindo Xamarin Forms"
VerticalOptions="CenterAndExpand"
HorizontalOptions="CenterAndExpand" />
</StackLayout>
</ContentPage.Content>
</ContentPage>
|
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
switch (Device.RuntimePlatform)
{
case Device.iOS:
Label1.FontSize = Device.GetNamedSize(NamedSize.Large, Label1);
break;
case Device.Android:
Label1.FontSize = Device.GetNamedSize(NamedSize.Medium, Label1);
break;
case Device.WinPhone:
Label1.FontSize = Device.GetNamedSize(NamedSize.Medium, Label1);
break;
case Device.UWP:
Label1.FontSize = Device.GetNamedSize(NamedSize.Large, Label1);
break;
}
}
}
|
MainPage.xaml | MainPage.xaml.cs |
O método RuntimePlatform é de tipo string e pode ser facilmente comparado com constantes específicas chamadas iOS, Android, WinPhone e UWP que representam as plataformas suportadas.
Nota: As enumerações Device.OS e TargetPlatform
agora estão obsoletas e devem ser substituidas por
RunTimePlatform.
O método GetNamedSize resolve automaticamente o tamanho da fonte
Default, Micro, Small Medium e Large e retorna o
valor double correspondente, o qual evita a necessidade de fornecer valores
numéricos que seriam diferentes para cada plataforma.
Usando a propriedade Device.Idiom você pode determinar se o dispositivo atual em que o aplicativo está sendo executado é um telefone, tablet ou PC desktop (somente UWP) e retorna um dos valores da enumeração TargetIdiom.
Abaixo temos o exemplo de código :
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
switch (Device.RuntimePlatform)
...
switch (Device.Idiom)
{
case TargetIdiom.Desktop:
// UWP desktop
break;
case TargetIdiom.Phone:
// Fones
break;
case TargetIdiom.Tablet:
// Tablets
break;
case TargetIdiom.Unsupported:
// dispositivos não suportados
break;
}
}
}
|
MainPage.xaml.cs |
Podemos também decidir como ajustar elementos da interface do usuário com base na plataforma e idioma no código XAML. No exemplo abaixo estamos ajustando a propriedade Padding da página com base na platataforma.
<?xml version="1.0"
encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:XF_Device" x:Class="XF_Device.MainPage"> <StackLayout> <StackLayout.Padding> <OnPlatform x:TypeArguments="Thickness"> <On Platform="Android" Value="0, 0, 0, 0"/> <On Platform="WinPhone" Value="0, 0, 0, 0"/> <On Platform="iOS" Value="0, 20, 0, 0"/> </OnPlatform> </StackLayout.Padding> </StackLayout> <StackLayout> <Label x:Name="Label1" Text="BemVindo Xamarin Forms" VerticalOptions="CenterAndExpand" HorizontalOptions="CenterAndExpand" /> </StackLayout> </ContentPage> |
MainPage.xaml |
Usando a
tag OnPlatform, você pode especificar um valor de propriedade diferente
com base no iOS, Android e WinPhone. O valor da propriedade depende do atributo
x:TypeArguments que representa o tipo .NET para a propriedade, Thickness
(Espessura) neste caso particular.
Da mesma forma, você também pode trabalhar com OnIdiom e a enumeração
TargetIdiom no XAML.
E estamos conversados...
"Disse-lhe Jesus: Eu
sou o caminho, e a verdade e a vida; ninguém vem ao Pai, senão por mim"
João 14:6
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.Widget.ListView/
https://developer.xamarin.com/api/property/Android.Widget.ListView.Adapter/
https://developer.xamarin.com/guides/xamarin-forms/user-interface/animation/