Vous êtes sur la page 1sur 34

Xamarin Diplomado

Examinando a anatomia de uma aplicao Xamarin.Forms

Laboratrio
Compartilhando cdigo entre projetos
multiplataforma

Verso: 1.0.0
Outubro de 2016

Miguel Muoz Serafn


@msmdotnet

Pgina 1 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

CONTEDO

INTRODUO

EXERCCIO 1: EXAMINANDO AS OPES PARA COMPARTILHAR CDIGO


Tarefa 1. Criar uma aplicao Xamarin.Forms com o modelo SAP.

Tarefa 2. Examinar os arquivos de cdigo gerados.

EXERCCIO 2: UTILIZANDO O VIEW LABEL PARA MOSTRAR TEXTO


Tarefa 1. Criar uma soluo Xamarin.Forms PCL.

Tarefa 2. Incluir espao (preenchimento) na pgina (Soluo 1).

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).

Tarefa 5. Centralizar a Label dentro da pgina (Soluo 4).

Tarefa 6. Centralizar o texto dentro da Label (Soluo 5).

SUMRIO

Pgina 2 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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:

Descrever como compartilhar o cdigo atravs de projetos PCL.


Descrever como compartilhar o cdigo atravs dos projetos SAP.
Utilizar o componente Label para exibir o texto em uma aplicao Xamarin.Forms.

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.

Tempo estimado para completar este laboratrio: 60 minutos.

Pgina 3 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Exerccio 1: Exminndo s opoes pr


comprtilhmento de codigo.
Neste exerccio, voc ter a oportunidade de explorar as vantagens e desvantagens das duas opes
disponveis para compartilhar cdigo em uma aplicao multiplataforma Xamarin.Forms.

Tarefa 1. Criar uma aplicao Xamarin.Forms com o modelo SAP.

A soluo criada no laboratrio anterior usou o modelo PCL. Agora hora de criar uma segunda
soluo usando o modelo SAP.

1. Selecione a opo File > New > Project no Visual Studio.


2. No painel esquerdo da janela New Project selecione Visual C# > Cross-Platform.

3. No painel central da janela New Project voc pode ver diferentes modelos de soluo
disponveis incluindo 5 de Xamarin.Forms:

a. Blank App (Xamarin.Forms Portable)


b. Blank App (Xamarin.Forms Shared)
c. Blank Xaml App (Xamarin.Forms Portable)
d. Blank Xaml App (Xamarin.Forms Shared)
e. Class Library (Xamarin.Forms)

Pgina 4 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Clique em cada um dos modelos para ver sua descrio no painel da direita.

O termo Portable neste contexto se refere a uma Biblioteca de Classes Porttil


(Portable Class Library PCL). Todo o cdigo comum de aplicativos se converte em uma
biblioteca DLL que referenciado por todos os projetos de plataforma individual.

O termo Shared neste contexto se refere a um Projeto de Recursos Compartilhados


(Shared Asset Project SAP). Este projeto contm arquivos de cdigo e outro tipo de
arquivos que so compartilhados com os projetos de cada plataforma, essencialmente,
tornar-se parte de cada projeto em cada plataforma.

4. Selecione o modelo Blank App (Xamarin.Forms Shared).

5. Fornea o nome, local e clique em OK para criar o projeto.

Pgina 5 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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:

a. Um projeto PCL chamado HelloXamarinFormsSAP que referenciado por outros 5


projetos.
b. Um projeto de aplicao para Android chamado HelloXamarinSAP.Droid.
c. Um projeto de aplicao para iOS chamado HelloXamarinSAP.iOS.
d. Um projeto de aplicao para a UWP de Windows 10 e Windows Mobile 10 chamado
HelloXamarinFormsSAP.UWP.
e. Um projeto de aplicao para Windows 8.1 chamado
HelloXamarinFormsSAP.Windows.
f. Um projeto de aplicao para Windows Phone 8.1 chamado
HelloXamarinFormsSAP.WinPhone.

Pgina 6 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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.

8. Clique na opo Updates para ver as atualizaes disponveis.

9. Selecione o pacote Xamarin.Forms e clique em Update para iniciar a atualizao.

Pgina 7 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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).

Observe que na coluna Platform:

O projeto SAP estabeleceu a nica opo disponvel Any CPU.


O projeto Android estabeleceu a nica opo disponvel Any CPU.
O projeto iOS pode ter os valores iPhone ou iPhoneSimulator dependendo de como
estaremos testando o aplicativo.
O projeto UWP pode ter o valor x86 para implantar o aplicativo para o desktop do
Windows ou para um emulador. Tambm pode ter o valor ARM para implantar o
aplicativo a um telefone.
O projeto do Windows pode levar o valor x86 para implantar o aplicativo para o
desktop do Windows ou para um emulador. Tambm pode ter o valor ARM para
implantar o aplicativo para um tablet. Voc pode at ter o valor x64 para implantar o

Pgina 8 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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.

12. Clique em Close para fechar a caixa de dilogo Configuration Manager.

13. Teste a operao de cada um dos projetos de cada plataforma. Voc ver a mensagem
Welcome to Xamarin Forms! em cada plataforma.

Tarefa 2. Examinar os arquivos de cdigo gerados.

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.

Com a aproximao do projeto PCL, todo o cdigo comum encapsulado dentro de


uma biblioteca DLL que cada projeto de aplicativos faz referncias e links em tempo
de execuo.
Com a aproximao do projeto SAP, com os arquivos de cdigo comuns so
realmente includos com cada um dos 5 projetos em tempo de compilao.

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.

Pgina 9 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Alguns problemas sutis (e no to sutis) podem manifestar-se com a abordagem da biblioteca


compartilhada, por exemplo, projetos Android e iOS tm acesso a mais ou menos a mesma verso do
.NET, mas no a mesma verso do .NET que usam os projetos do Windows. Isto significa que
qualquer classe .NET que o cdigo partilhado acessa poderia ser um pouco diferente dependendo da
plataforma. Este o caso de algunas classes de espao de E/S de arquivos no espao de nomes
System.IO.

Ns podemos compensar isso atravs do uso de diretivas de compilador do C#, em particular a


diretiva #if e #elif. Os projetos gerados pelo modelo Xamarin.Forms, os vrios projetos de
implementao definem smbolos que podem ser usados com estas directivas. Vamos ver o que
esses smbolos so.

2. Selecione a opo Properties do menu de contexto do projeto Android. A folha de


propiedades do projeto ser exibida.

3. Selecione a opo Build e observe o valor do campo Conditional compilation symbols.


Poder notar que o campo aparece vazio, no entanto, o identificador __ANDROID__ e vrios
identificadores __ANDROID_nn__ (onde nn representa cada nvel de API Android suportada)
so definidos.

Pgina 10 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

4. Selecione a opo Properties do menu contextual do projetos iOS. A folha de propiedades do


projeto ser exibida.

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__

6. Selecione a opo Properties do menu contextual do projeto UWP. A folha de propriedades


do projeto ser exibida.

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

Pgina 11 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

8. Selecione a opo Properties do menu contextual do projeto Windows. A folha de


propiedades do projeto ser exibida.

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

Pgina 12 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

12. Abra o arquivo App.cs do projeto SAP.

13. Substitua a linha

Text = "Welcome to Xamarin Forms!"

pelo seguinte cdigo:

#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.

16. Implante o aplicativo em um emulador Windows 10 Mobile. Voc ver a mensagem


apropriada para UWP mostrado.

Pgina 13 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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.

Diretivas do compilador so sem sentido em projetos PCL. Um projeto de PCL totalmente


independente das 5 plataformas como identificadores em cada projeto de plataformas no esto
presentes no momento em que o projeto compilado em PCL.

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

Pgina 14 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

bandeiras incorporados indicando plataformas de apoio. A PCL usada em uma aplicao


Xamarin.Forms deve suportar as seguintes plataformas:

.NET Framework 4.5


Windows 8
Windows Phone 8.1
Xamarin.Android
Xamarin.iOS
Xamarin.iOS (Classic)

Se precisarmos de um comportamento especfico de uma plataforma na PCL, no poderamos usar as


diretivas de compilao de C#, porque estes s agem em tempo de compilao. Precisamos de algo
que funciona em tempo de execuo, como a clase Device de Xamarin.Forms.

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).

Pgina 15 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao 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.

Pgina 16 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Exerccio 2: Utilizndo o View Lbel


pr mostrr o texto.
Neste exerccio, vamos explorar o View Label para mostrar texto em uma aplicao multiplataforma
desenvolvida em Xamarin.Forms.

Tarefa 1. Criar uma soluo Xamarin.Forms PCL.

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.

3. Na janela Add New Item, selecione a janela Forms Page.

4. Coloque o nome GreetingsPage.cs e clique em Add para adicionar o novo elemento.

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.

public class GreetingsPage : ContentPage


{
public GreetingsPage()
{
Content = new StackLayout
{
Children = {
new Label { Text = "Hello Page" }
}
};
}
}

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!";

Pgina 18 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

this.Content = MyLabel;
}

8. Abra o arquivo App.cs do projeto PCL.


9. Elimine o cdigo do construtor. O cdigo da classe ser similar a seguinte.

public class App : Application


{
public App()
{

protected override void OnStart()


{
// Handle when your app starts
}

protected override void OnSleep()


{
// Handle when your app sleeps
}

protected override void OnResume()


{
// Handle when your app resumes
}
}

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();
}

11. Compile e execute a aplicao em emuladores Android, iOS e Windows 10 Mobile.


As imagens seguintes mostram a aplicao nos 3 emuladores.

Pgina 19 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Android

Pgina 20 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

iOS

Pgina 21 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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.

Pgina 22 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Como posso resolver este problema? H 4 maneiras de resolver este problema (ou 5, se
usarmos um projeto SAP).

Tarefa 2. Incluir espao (preenchimento) na pgina (Soluo 1).

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.

1. Adicione o seguinte cdigo ao construtor da classe GreetingsPage para deixar um espao de


20 unidades no topo da pgina.

public GreetingsPage()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;

Padding = new Thickness(0, 20, 0, 0);

2. Execute o aplicativo nos 3 emuladores para ver o resultado.

Android iOS Windows 10 Mobile

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?

Pgina 23 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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.

1. Abra uma nova instncia do Visual Studio.


2. Crie o projeto GreetingsSAP utilizando o modelo Blank App (Xamarin.Forms Shared).

3. Selecione Add > New Item no menu contextual do projeto SAP.


4. Na janela Add New Item, selecione o modelo Forms Page.

5. Asigna el nombre GreetingsSAPPage.cs e clique em Add para adicionar o novo elemento.


6. Modifique o cdigo do arquivo GreetingsSAPPage.cs para que ser semelhante a classe
Greetings do projeto PCL.

using System;
using Xamarin.Forms;

namespace GreetingsSAP
{
public class GreetingsSAPPage : ContentPage
{
public GreetingsSAPPage ()
{
var MyLabel = new Label();

Pgina 24 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

MyLabel.Text = "Greetings, Xamarin.Forms!";


this.Content = MyLabel;

Padding = new Thickness(0, 20, 0, 0);


}
}
}

7. Abra o arquivo App.cs do projeto SAP.


8. Elimine o cdigo de construtor. O cdigo de classe ser parecido com este.

public class App : Application


{
public App()
{

protected override void OnStart()


{
// Handle when your app starts
}

protected override void OnSleep()


{
// Handle when your app sleeps
}

protected override void OnResume()


{
// Handle when your app resumes
}
}

9. Adicione o seguinte cdigo dentro do construtor para establecer a propriedade MainPage o


valor de uma instncia da classe GreetingsSAPPage.

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.

Pgina 25 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Android iOS Windows 10 Mobile

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.

Android iOS Windows 10 Mobile

Pgina 26 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Observe que, como a diretiva #if refere-se ao smbolo de compilao condicional __IOS__, a
propriedade Padding definida somente para o projeto iOS.

No entanto, estes smbolos de compilao condicional afetam apenas a compilao do


programa, por isso que eles no tm efeito sobre uma soluo PCL. Existe alguma maneira
para que um projeto de PCL possa incluir diferentes valores Padding para diferentes
plataformas?

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.

A propriedade Device.OS retorna um membro da enumerao TargetPlatform que indica o


tipo de sistema operacional que est trabalhando: Android, iOS, Other, Windows ou
WinPhone.
A propriedade Device.Idiom retorna um membro da enumerao TargetIdiom que indica o
tipo de dispositivo que est trabalhando: Desktop, Phone, Tablet ou Unsupported.

possvel utilizar essas duas propriedades em instrues if e else ou em um bloco switch para
executar um cdigo especfico de uma plataforma particular.

Dois mtodos chamados OnPlatform proporcionam solues mais elegantes:

O mtodo genrico esttico Device.OnPlatform<T> leva 3 argumentos de tipo T, o primeiro


para iOS, o segundo para Android e o terceiro para plataformas Windows.
O segundo mtodo esttico Device.OnPlatform tem 4 argumentos de tipo Action tambm na
ordem iOS, Android e Windows com um 4 argumento para um valor padro.

1. Abra o arquivo GreetingsPage do projeto PCL.


2. Substitua a linha de cdigo Padding = new Thickness(0, 20, 0, 0); pelo seguinte cdigo
para definir o valor Padding para os dispositivos iPhone.
Padding = Device.OnPlatform<Thickness>(
new Thickness(0, 20, 0, 0),
new Thickness(0),
new Thickness(0));

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.

Pgina 27 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Android iOS Windows 10 Mobile

Pode notar que o Padding foi aplicado apenas ao dispositivo iOS.

O cdigo anterior tambm poderia ser da seguinte maneira. Por qu?

Padding = new Thickness(0, Device.OnPlatform(20, 0, 0), 0, 0);

Podemos at mesmo usar a verso de Device.OnPlatform com argumentos Action.

3. Modificar a linha de cdigo anterior com o seguinte.

Device.OnPlatform(() =>
{
Padding = new Thickness(0, 20, 0, 0);
});

Os argumentos do mtodo OnPlatform so null por padro, ento podemos estabelecer


apenas o valor do primeiro argumentoa ser procesado em iOS, como mostrado no cdigo
anterior.

14. Compile e execute a aplicao em emuladores Android, iOS e Windows 10 Mobile.


As imagens seguintes mostram a aplicao nos 3 emuladores.

Android iOS Windows 10 Mobile

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

Pgina 28 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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);
});

A sintaxe acima torna explcito que a instruo executada apenas no iOS.


O mtodo Device.OnPlatform muito conveniente e tem a vantagem de trabalhar em
ambos os projetos PCL e SAP. No entanto, voc no pode acessar as APIs dentro de
plataformas individuais. Para fazer isso vamos precisar DependencyService.

Tarefa 5. Centralizar o Label dentro da pgina (Soluo 4).

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.

Geralmente utilizamos a estrutura LayoutOptions especificando um dos 8 campos pblicos estticos


que apenas definem leitura:

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:

Uma propriedade Alignment de tipo LayoutAlignment que uma enumerao com 4


membros: Center, End, Fill e Start.
Uma propriedade Expands de tipo bool.

Para a propriedade HorizontalOptions, a palavra Start significa esquerda e End significa direita.

Pgina 29 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Para a propriedade VerticalOptions, a palavra Start significa acima e End significa abaixo.

Para mais informaes sobre a estrutura LayoutOptions voc pode consultar o


seguinte link:

Xamarin.Forms.LayoutOptions Structure
https://developer.xamarin.com/api/type/Xamarin.Forms.LayoutOptions/

Vamos ver como posicionar a Label no centro da pgina.

1. Modifique o cdigo do construtor da classe GreetingsPage da seguinte forma.

public class GreetingsPage : ContentPage


{
public GreetingsPage()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;

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.

As imagens seguintes mostram a aplicao nos 3 emuladores.

Pgina 30 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Android iOS

Pgina 31 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Windows 10 Mobile

Tarefa 6. Centralizar o texto dentro da Label (Soluo 5).

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.

Pgina 32 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

Para esta ltima soluo ao problema da barra de status de iOS vamos configurar os valores das
propriedades HorizontalTextAlignment e VerticalTextAlignment do View Label.

1. Modifique o cdigo do construtor da classe GreetingsPage da seguinte maneira.

public class GreetingsPage : ContentPage


{
public GreetingsPage()
{
var MyLabel = new Label();
MyLabel.Text = "Greetings, Xamarin.Forms!";
this.Content = MyLabel;

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.

Pgina 33 de 34 Suporte: mmunoz@mail.ticapacitacion.com


Xamarin Diplomado
Examinando a anatomia de uma aplicao Xamarin.Forms

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:

Acabei o #Lab03 do #XamarinDiplomado e conheo as opes para compartilhar cdigo


em Xamarin!

Pgina 34 de 34 Suporte: mmunoz@mail.ticapacitacion.com

Vous aimerez peut-être aussi