Académique Documents
Professionnel Documents
Culture Documents
Laboratrio
Compartilhando cdigo entre projetos
multiplataforma
Verso: 1.0.0
Outubro de 2016
CONTEDO
INTRODUO
Tarefa 3. Incluir espao (preenchimento) apenas para iOS em projetos SAP (Soluo 2).
Tarefa 4. Incluir espao (preenchimento) apenas para iOS em projetos PCL ou SAP (Soluo
3).
SUMRIO
Introduo
Quando voc criou a soluo HelloXamarinForms no Visual Studio, teve a opo de selecionar 2 tipos
principais de modelos:
Xamarin.Forms Portable
Xamarin.Forms Shared
A primeira opo cria uma biblioteca de classes porttil (PCL), enquanto a segunda opo cria um
projeto de Recursos porttil (SAP), que consiste nicamente de arquivos de cdigo compartilhado.
Neste laboratrio, vamos discutir as vrias opes para compartilhar cdigo em uma aplicao
multiplataforma e explorar o View Label com as consideraes que devemos ter no momento de
mostrar o texto em uma aplicao multiplataforma desenvolvida com Xamarin.Forms.
Objetivos
Aps a concluso deste laboratrio, os participantes sero capazes de:
Requisitos
Para a realizao deste laboratrio necessrio contar com o seguinte:
Um computador de desenvolvimento com sistema Windows 10 e Visual Studio 2015
Community, Professional ou Enterprise com a plataforma Xamarin.
Um computador Mac com a plataforma Xamarin.
A soluo criada no laboratrio anterior usou o modelo PCL. Agora hora de criar uma segunda
soluo usando o modelo SAP.
3. No painel central da janela New Project voc pode ver diferentes modelos de soluo
disponveis incluindo 5 de Xamarin.Forms:
Clique em cada um dos modelos para ver sua descrio no painel da direita.
6. Clique no boto OK da caixa de dilogo New Universal Windows Project para aceitar as
verses sugeridas para a aplicao UWP que ser criada.
Seis projetos so criados. Para uma soluo chamada HelloXamarinFormsSAP, esses projetos
so:
Quando voc cria uma nova soluo Xamarin.Forms, as bibliotecas Xamarin.Forms e outras
bibliotecas auxiliares so automaticamente transferidas a partir do gerenciador de pacotes
NuGet. Visual Studio armazena essas bibliotecas em um diretrio chamado pacotes dentro
da soluo. No entanto, a verso especfica da biblioteca do Xamarin.Forms que baixado
especificado dentro do modelo da soluo e, portanto, uma nova verso pode estar
disponvel.
7. Selecione a opo Manage NuGet Packages for Solution no menu contextual do nome da
soluo.
Voc provavelmente ser solicitado para aceitar as alteraes feitas e reiniciar o Visual
Studio para concluir a instalao.
10. Uma vez que a atualizao for concluda, selecione a opo Build > Configuration Manager.
11. Na caixa de dilogo Configuration Manager voc vai ver o projeto SAP e os outros 5 projetos
de aplicao.
Verifique se a caixa de verificao Build est selecionada para todos os projetos e que a caixa
de seleo Deploy est selecionada para todos os projetos de aplicao (a menos que a caixa
seja cinza).
aplicativo para plataformas de 64 bits ou valor Any CPU para implantar o aplicativo
no desktop do Windows, emulador, tablet ou plataformas de 64 bits.
O projeto WinPhone pode ter o valor x86 para implantar o aplicativo para um
emulador, o valor ARM para implantar o aplicativo para um telefone real ou valor
Any CPU para implantar a aplicao, tanto no emulador quanto no telefone real.
13. Teste a operao de cada um dos projetos de cada plataforma. Voc ver a mensagem
Welcome to Xamarin Forms! em cada plataforma.
O projeto SAP o projeto que receber a maior parte de nossa ateno quando estamos escrevendo
uma aplicao Xamarin.Forms. Em algumas circunstncias, o cdigo neste projeto poderia exigir
algum cdigo especial de certas plataformas.
Como voc pode ver, tudo parece o mesmo entre uma soluo PCL e uma soluo SAP. Aqui esto
algumas diferenas.
1. A primeira diferena que notamos que o projeto SAP contm apenas um item: o arquivo
App.cs (alm do arquivo GettingStarted.Xamarin que informativo).
Tanto em projetos PCL como nos projetos SAP, o cdigo compartilhado com as 5
aplicaes, mas de maneiras diferentes.
Por padro, o projeto SAP tem apenas um arquivo chamado App.cs, mas realmente como se o
projeto SAP no existisse e que, em vez disso, havia 5 cpias diferentes desse arquivo, uma em cada
projeto de aplicativo.
5. Selecione a opo Build e observe o valor do campo Conditional compilation symbols. Voc
notar a lista de 3 smbolos definidos que so separados por ponto e vrgula:
__UNIFIED__
__MOBILE__
__IOS__
7. Selecione a opo Build e observe o valor do campo Conditional compilation symbols. Voc
pode observar os seguintes smbolos:
NETFX_CORE
WINDOWS_UWP
CODE_ANALYSIS
9. Selecciona la opcin Build y observa el valor del campo Conditional compilation symbols.
Voc pode observar os seguintes smbolos:
NETFX_CORE
WINDOWS_APP
10. Selecione a opo Properties o menu de contexto do projeto do Windows Phone. A folha de
propriedades do projeto ser exibida.
11. Selecione a opo Build e observe o valor do campo Conditional compilation symbols. Voc
pode observar os seguintes smbolos:
NETFX_CORE
WINDOWS_PHONE_APP
#if __IOS__
Text = "Welcome to iOS Xamarin Forms!"
#elif __ANDROID__
Text = "Welcome to Android Xamarin Forms!"
#elif WINDOWS_UWP
Text = "Welcome to Windows UWP Xamarin Forms!"
#elif WINDOWS_APP
Text = "Welcome to Windows Xamarin Forms!"
#elif WINDOWS_PHONE_APP
Text = "Welcome to Windows Phone Xamarin Forms!"
#endif
14. Implante o aplicativo em alguns emulador Android. Voc vai ver que a mensagem apropriada
exibida para Android.
15. Implante o aplicativo em qualquer emulador iOS. Voc vai ver que a mensagem apropriada
exibida para IOS.
17. Implante o aplicativo do Windows 8.1 no simulador. Voc ver a mensagem apropriada para
o aplicativo do Windows mostrado.
18. Exibe o aplicativo do Windows Phone em um emulador. Voc ver a mensagem apropriada
para o aplicativo do Windows Phone.
Como voc deve ter notado, pela diretivas de compilao C#, arquivos de codeshare podem executar
cdigo especfico para cada plataforma ou acessar as classes especficas de cada plataforma,
incluindo classes por projetos individuais de cada plataforma. Voc tambm pode definir seus
prprios smbolos de compilao condicional, se desejar.
O conceito de PCL originalmente surgiu porque cada plataforma que usa .NET, hoje, utiliza um
subconjunto diferente de .NET. Se voc deseja criar uma biblioteca que possa ser utilizada por
diferentes plataformas .NET, precisa usar apenas as partes comuns dos subconjuntos .NET.
Uma PCL projetada para ser de ajuda para conter cdigo que pode ser usado em vrios (mas
especficas) plataformas .NET. Consequentemente, uma determinada PCL contm uma espcie de
Uma PCL Xamarin.Forms pode acessar outras PCLs que suportem as mesmas plataformas, no
entanto, voc no pode acessar diretamente as classes definidas em projetos de aplicativos
individuais. Deveramos exigir esta funcionalidade, Xamarin.Forms fornece uma classe chamada
DependencyService que nos permite acessar um cdigo especfico da plataforma de uma PCL
seguindo uma metodologia.
PCL ou SAP?
PCL a estratgia recomendada para Xamarin.Forms e a preferida por muitos programadores que
trabalham com Xamarin.Forms h muito tempo. No entanto, a estratgia SAP tambm suportado e
tambm tem os seus seguidores.
Qual escolher?
possvel ter ambos os tipos de projetos na mesma soluo Xamarin.Forms. Se ns criamos uma
soluo Xamarin.Forms com um projeto SAP, podemos adicionar um novo projeto PCL e a soluo
selecionando o modelo Class Library (Xamarin.Forms).
Os projetos e aplicaes podem acessar tanto o projeto SAP como o projeto PCL. O projeto PCL
tambm pode acessar os arquivos do projeto SAP.
Nesta tarefa criaremos uma nova soluo Xamarin.Forms PCL chamada Greetings utilizando o
mesmo processo descrito anteriormente para criar una soluo Xamarin.Forms utilizando o modelo
Blank App (Xamarin.Forms.Portable).
1. Crie uma nova aplicao multiplataforma chamada Greetings utilizando o modelo Blank App
(Xamarin.Forms.Portable).
2. Esta soluo ser estruturada como um programa tpico Xamarin.Forms, o que significa que
definir uma nova classe resultante de ContentPage. Portanto, devemos agregar um novo
arquivo ao projeto Greetings.
Selecione Add > New Item no menu contextual do projeto PCL Greetings.
5. Observe o cdigo da classe GreetingsPage. Voc notar que a classe deriva de ContentPage.
Como a classe ContentPage se encontra no espao de nomes Xamarin.Forms, podemos
observar que uma diretiva using inclui ese espao de nomes.
Pgina 17 de 34 Suporte: mmunoz@mail.ticapacitacion.com
Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms
A classe definida como pblica, mas no realmente necessrio, pois no pode ser
acessada diretamente fora do projeto Greetings.
na classe GreetingsPage (e outras como esta) onde investir grande parte de seu tempo no
incio de programao com Xamarin.Forms. Para programas de uma nica pgina, esta classe
pode conter o cdigo exclusivo do aplicativo que voc precisa para escrever. Claro,
poderamos agregar classes adicionais para o projeto se precisarmos dela tambm.
Tradicionalmente, os programas de uma nica pgina, recomenda-se que a classe que deriva
de ContentPage tem o mesmo nome do aplicativo, mas com o sufixo Page. Essa conveno
de nomenclatura sugerido, mas no obrigatria.
6. Elimina todo o cdigo do construtor GreetingsPage e as diretivas using para que o arquivo se
parea com o seguinte.
using System;
using Xamarin.Forms;
namespace Greetings
{
public class GreetingsPage : ContentPage
{
public GreetingsPage()
{
}
}
}
7. Adicione o seguinte cdigo dentro do construtor para instanciar um Label, defina sua
propriedade Text e atribuir a ocorrncia Label na propiedade Content que GreetingsPage
herda de ContentPage.
public GreetingsPage()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;
}
10. Adicone o seguinte cdigo dentro do construtor para establecer a propriedade MainPage o
valor de uma instncia da classe GreetingsPage.
public App()
{
MainPage = new GreetingsPage();
}
Android
iOS
Windows 10 Mobile
Definitivamente a verso mais decepcionante desta aplicao Greetings a verso iOS. Voc
pode achar que a aplicao divide a tela com a barra de status na parte superior. Qualquer
coisa que a aplicao mostre na parte superior da pgina ocupar o mesmo espao que a
barra de status, ao menos que a aplicao faa algo para evitar isso.
Como posso resolver este problema? H 4 maneiras de resolver este problema (ou 5, se
usarmos um projeto SAP).
A classe Page define uma propriedade chamada Padding que marca uma rea em torno do
permetro interno da pgina e onde o contedo no pode ser localizado. A propriedade Padding do
tipo Thickness, uma estrutura que define quatro propriedades chamadas Left, Top, Right e Bottom.
recomendado lembrar essa ordem, pois a ordem que definiremos as propriedades no construtor da
classe Thickness assim como em XAML. A estrutura Thickness tambm define construtores para
estabelecer a mesma quantidade de espao em 4 lados ou para estabelecer a mesma quantidade de
espao no lado esquerdo e direito ou superior e inferior.
Com uma pequena pesquisa na Internet podemos encontrar que a barra de status do iOS tem uma
altura de 20 unidades.
public GreetingsPage()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;
Voc pode notar que quando definir o valor na propriedade Padding de ContentPage
resolver o problema da sobreposio de texto com a barra de status do iOS, mas tambm
fornece o mesmo espao no necessrio no Android e Windows Mobile. Existe maneira de
estabelecer o espao apenas no iPhone?
Tarefa 3. Incluir espao (preenchimento) para iOS apenas em projetos SAP (Soluo 2).
Uma das vantagens da utilizao de projetos SAP que as classes no projeto so extenses dos
projetos das aplicaes, portanto, podemos usar diretivas de compilao condicional.
using System;
using Xamarin.Forms;
namespace GreetingsSAP
{
public class GreetingsSAPPage : ContentPage
{
public GreetingsSAPPage ()
{
var MyLabel = new Label();
public App()
{
MainPage = new GreetingsSAPPage();
}
10. Compile e execute a aplicao nos emuladores Android, iOS e Windows 10 Mobile.
As imagens seguintes mostram a aplicao nos 3 emuladores.
Neste momento, ambas solues PCL e SAP tm o mesmo problema que adiciona espao na
parte superior da pgina no Android e Windows Mobile.
11. Modifique o cdigo do construtor da classe GreetingsSAPPage para incorporar uma diretiva
de compilao que faa com que o cdigo que define o valor a propriedade Padding seja
apenas compilado no projeto iOS. O cdigo ser similar ao seguinte.
public GreetingsSAPPage ()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;
#if __IOS__
Padding = new Thickness(0, 20, 0, 0);
#endif
12. Compile e execute a aplicao nos emuladores Android, iOS e Windows 10 Mobile.
As imagens seguintes mostram a aplicao nos 3 emuladores.
Observe que, como a diretiva #if refere-se ao smbolo de compilao condicional __IOS__, a
propriedade Padding definida somente para o projeto iOS.
Tarefa 4. Incluir espao (preenchimento) apenas para iOS em projetos PCL ou SAP (Soluo 3).
A classe esttica Device, inclui vrias propriedades e mtodos que permitem que o cdigo resolva as
diferenas entre dispositivos em tempo de execuo em uma maneira fcil e simples.
possvel utilizar essas duas propriedades em instrues if e else ou em um bloco switch para
executar um cdigo especfico de uma plataforma particular.
O primeiro argumento Thickness para iOS, o Segundo para Android e o terceiro para
Windows.
13. Compile e execute a aplicao em emuladores Android, iOS e Windows 10 Mobile.
As imagens seguintes mostram a aplicao nos 3 emuladores.
Device.OnPlatform(() =>
{
Padding = new Thickness(0, 20, 0, 0);
});
Voc pode notar que o aplicativo funciona como esperado porque a instruo que define o
Padding executado apenas quando a aplicao est em execuo no iOS. claro que
atravs da criao de um nico argumento no mtodo Device.OnPlatform faria o cdigo
compreensvel para algumas pessoas que precisam de l-lo. Algo que poderia ajudar a tornar
o cdigo mais claro definir o nome do parmetro que precede o argumento como no
exemplo a seguir.
Device.OnPlatform(iOS: () =>
{
Padding = new Thickness(0, 20, 0, 0);
});
O problema do texto sobre a barra de status do iOS ocorre apenas porque a apresentao padrao
do texto feita na parte superior esquerda. possvel centralizar o texto na pgina?
Xamarin.Forms suporta vrios recursos que facilitam o projeto sem a necessidade de o programa
para realizar clculos complexos que envolvem tamanhos e coordenadas. A classe View define duas
propriedades chamadas HorizontalOptions e VerticalOptions que especificam como o View deve ser
posicionado em relao ao seu recipiente (neste caso ContentPage). Estas duas propriedades esto
tipo LayoutOptions, uma estrutura muito importante em Xamarin.Forms.
Center
CenterAndExpand
End
EndAndExpand
Fill
FillAndExpand
Start
StartAndExpand
A estrutura LayoutOptions tambm define duas propriedades de instncia que nos permitem criar
valor com as mesmas combinaes:
Para a propriedade HorizontalOptions, a palavra Start significa esquerda e End significa direita.
Para a propriedade VerticalOptions, a palavra Start significa acima e End significa abaixo.
Xamarin.Forms.LayoutOptions Structure
https://developer.xamarin.com/api/type/Xamarin.Forms.LayoutOptions/
MyLabel.HorizontalOptions = LayoutOptions.Center;
MyLabel.VerticalOptions = LayoutOptions.Center;
}
}
2. Compile e execute a aplicao nos emuladores Android, iOS e Windows 10 Mobile. Voc vai
notar que o texto aparece centralizado na pgina.
Android iOS
Windows 10 Mobile
O View Label foi projetado para exibir o texto em uma linha ou pargrafo. Muitas vezes, necessrio
controlar a forma como as linhas de texto so alinhados horizontalmente. O View Label define a
propriedade HorizontalTextAlignment para esse fim e tambm define a propriedade
VerticalTextAlignment para posicionar o texto verticalmente. Ambas as propriedades so definidas
para o valor de um membro da enumerao TextAlignment que tem os membros Start, Center e
End.
Para esta ltima soluo ao problema da barra de status de iOS vamos configurar os valores das
propriedades HorizontalTextAlignment e VerticalTextAlignment do View Label.
MyLabel.HorizontalTextAlignment = TextAlignment.Center;
MyLabel.VerticalTextAlignment = TextAlignment.Center;
}
}
2. Compile e execute a aplicao nos emuladores Android, iOS e Windows 10 Mobile. Voc vai
notar que o texto aparece centralizado na pgina.
Visualmente, o resultado com apenas uma linha de texto o mesmo que centralizar com as
propriedades HorizontalOptions e VerticalOptions no entanto essas tcnicas so
ligeiramente diferentes.
Resumo
Neste laboratrio voc analisou as diferentes opes para compartilhar cdigo em uma aplicao
multiplataforma e explorou o View Label para exibir texto em uma aplicao multiplataforma
desenvolvida com Xamarin.Forms. Conheceu tambm algumas das alternativas disponveis ao exibir
texto para ter a mesma aparncia nas distintas plataformas.
momento de comear a trabalhar com mais elementos para construir a interface de usurio em
uma aplicao Xamarin.Forms.
Quando tiver terminado este laboratorio, publique a seguinte mensagem no Twitter e Facebook: