editorial - theclub.com.br · editorial caro amigo, estamos quase na metade deste ano de 2019 e...

14

Upload: others

Post on 28-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar
Page 2: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Editorial

Caro amigo,

Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre

procura diversificar assuntos para que você, leitor, tenha uma maior gama de conhecimentos no mundo vasto da programação.

Para iniciar nossa série de artigos, o colaborador Luciano Pimenta nos ensina nesta sétima parte do artigo sobre “Xamarin

Forms” como trabalhar com configurações de cores e controles através desta magnífica ferramenta. Outra dica importante que ele

abrange é a definição de uma cor padrão utilizada no projeto, poupando código XAML. Além disso, ele cria projetos multi-idiomas

para os aplicativos. Já nosso consultor técnico Thiago Cavalheiro Montebugnoli redigiu a primeira parte do artigo “Windows Forms –

Implementando a API do Google Drive”. Neste primeiro artigo ele discute de uma forma bem rápida e prática todos os passos

necessários para registrar e obter os dados para realização do acesso via API do Google Drive para uma futura implementação com

aplicações Windows Forms junto com a manipulação completa de arquivos.

Desejo uma ótima leitura, um abraço e até o mês que vem!

Marcos César Silva

Diretor Técnico

Page 3: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Xamarin

Um aplicativo mobile, chama a atenção pela facilidade de uso, mas também pelo layout apresentado. Um

aplicativo que não consegue distribuir bem as cores está fadado a cair no esquecimento do usuário, pois não chama a

atenção visualmente. Além disso, se pensarmos em um aplicativo que atinja um grande número de usuários devemos

pensar no uso de multi-idiomas no projeto.

No Xamarin, podemos customizar as cores, tamanho de fonte, inclusive podemos dar essa responsabilidade

para o usuário personalizar como desejar.

Resources

Você pode pensar que estamos falando de arquivos RESX, mas neste momento ainda não, veremos esse tipo de

arquivo mais adiante. Os resources do Xamarin Forms se referem à criação de definições de cores para serem

compartilhadas com a aplicação.

Assim, se tivermos uma cor padrão do nosso aplicativo, podemos compartilhar entre toda a aplicação. Crie um

novo projeto Xamarin Forms. Os resources são definidos no arquivo App.xaml (ResourcesDictionary) e combinam a

características de chave=valor. Veja na Listagem 1 um exemplo.

<ResourceDictionary>

<Color x:Key="CorFundo">White</Color>

<Color x:Key="CorTexto">Blue</Color>

<x:Double x:Key="TamanhoFonte">14</x:Double>

</ResourceDictionary>

Listagem 1. Criando resources

Definimos duas cores e o tamanho da fonte. Agora, basta atribuir para controles às respectivas chaves. Mas o

resource ainda se divide em Static e Dynamic na hora de sua atribuição. O Static, como o próprio nome diz (estático), é

atribuído a um controle e não pode ser modificado seu valor em tempo de execução.

Adicione alguns controles na página e atribuia o resource conforme a Listagem 2.

<StackLayout Padding="10,40,10,0">

<Label Text="Usuário" TextColor="{StaticResource CorTexto}"

FontSize="{StaticResource TamanhoFonte}" />

<Entry BackgroundColor="{StaticResource CorFundo}"

TextColor="{StaticResource CorTexto}" >

<Label Text="Senha" TextColor="{StaticResource CorTexto}"

FontSize="{StaticResource TamanhoFonte}" />

<Entry IsPassword="True" BackgroundColor="{StaticResource CorFundo}"

TextColor="{StaticResource CorTexto}" /> </StackLayout>

Listagem 2. Atribuindo o resource a controles de tela

Basta colocar o texto StaticResource combinado com o nome da chave que criamos no Resource. Execute o

projeto e veja o projeto com o resource (Figura 1).

Page 4: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Figura 01. Usando resources no Xamarin Forms

Já o Dynamic, pode ser alterado em tempo de execução. Assim, podemos deixar a cargo do usuário escolher o

“tema” da aplicação. A única alteração no XAML é trocar StaticResource por DynamicResource, muito simples. No C#,

podemos alterar o valor do Resource usando o seguinte código:

App.Current.Resources["CorFundo"] = Color.Black;

App.Current.Resources["CorTexto"] = Color.White;

Assim, podemos passar para o usuário a responsabilidade das cores que ele deseja configurar na aplicação. Veja

na Figura 2 como alteramos o Resource em tempo de execução.

Figura 02. Alterando o Resources

Styles

Para entendermos melhor, veja o código da Listagem 3 onde vamos configurar as características do Label e

Entry. Ainda estamos usando o arquivo App.xamlM na seção ResourceDictionary.

<Style x:Key="meuLabel" TargetType="Label">

<Setter Property="TextColor" Value="{DynamicResource

CorTexto}" /> <Setter Property="FontSize"

Value="{DynamicResource TamanhoFonte}" /> <Setter

Property="Font" Value="Arial" /> </Style>

<Style x:Key="meuEntry" TargetType="Entry">

<Setter Property="BackgroundColor" Value="{DynamicResource

CorFundo}" /> <Setter Property="TextColor"

Value="{DynamicResource CorTexto}" />

</Style>

Listagem 3. Trabalhando com Style no Xamarin

Podemos usar os Resources criados anteriormente. O TargetType indica o controle que queremos customizar.

Para Label alteramos a cor de fundo, cor do texto, tamanho e tipo de fonte. Para o Entry, mudarmos apenas a cor do

texto e fundo. Adicione uma página e alguns controles (Label e Entry). Use a propriedade Style de cada controle para

atribuir o estilo correspondente:

Page 5: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

<Label Style="{DynamicResource meuLabel}" Text="Meu Label"/>

<Entry Style="{DynamicResource meuEntry}" Placeholder="Meu Entry"/>

Idiomas

Dependendo do objetivo do seu aplicativo, ele pode atingir usuários fora do Brasil. No Xamarin Forms, você pode

definir quais os idiomas serão suportados no seu projeto. Nesse exemplo, vamos usar arquivos RESX para armazenar os textos

e suas traduções.

Crie um novo projeto ou use o mesmo do exemplo anterior. Crie uma pasta chamada “ResourcesString” e adicione

três arquivos RESX: “AppResource.resx”, “AppResource.pt-BR.resx” e “AppResource.es-ES.resx”.

Teremos o idioma português do Brasil, espanhol da Espanha e inglês americano. O arquivo RESX é composto por uma

combinação chave=valor, assim, basta adicionar o nome do texto (sem espaços ou acentos) em key e o valor em value (Figura

3).

Figura 03. Criando o arquivo de tradução

A nomenclatura do arquivo deve seguir o padrão do .NET para os códigos de idioma (CultureInfo), assim, ele

saberá que o arquivo de tradução do português é o AppResource.pt-BR.resx. O arquivo sem o código do idioma é o

inglês por padrão.

No editor o arquivo RESX, devemos sempre deixar o Access Modifier como Public. Para saber todos os códigos

de idiomas suportados no .NET, acesse: link http://azuliadesigns.com/list-net-culture-country-codes

Agora, precisamos trabalhar novamente com interface para atribuir e pegar o idioma corrente do nosso

dispositivo. Crie uma interface e dê o nome de “ILocale”. O código é simples:

string GetCurrent(); void SetLocale();

Agora, no projeto Android, crie uma classe chamada “Locale” e use o código da Listagem 4.

Page 6: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

[assembly: Dependency(typeof(Locale))]

...

public class Locale : ILocale

{

public void SetLocale()

{

var androidLocale = Java.Util.Locale.Default;

var netLocale =

androidLocale.ToString().Replace("_", "-"); var

ci = new

System.Globalization.CultureInfo(netLocale);

Thread.CurrentThread.CurrentCulture = ci;

Thread.CurrentThread.CurrentUICulture = ci; }

public string GetCurrent()

{

var androidLocale = Java.Util.Locale.Default;

var netLanguage =

androidLocale.ToString().Replace("_", "-"); return

netLanguage;

} }

Listagem 4. Classe de idioma no Android

O código é simples, onde pegamos o idioma do dispositivo Android. Para o iOS faça o mesmo processo,

criando uma classe chamada “Locale” e na Listagem 5 adicione o código da mesma.

[assembly: Dependency(typeof(Locale))]

...

public class Locale : ILocale

{

public void SetLocale()

{ var iosLocaleAuto =

NSLocale.AutoUpdatingCurrentLocale.LocaleIdentifier; var

netLocale = iosLocaleAuto.Replace("_", "-"); var ci = new

System.Globalization.CultureInfo(netLocale);

Thread.CurrentThread.CurrentCulture = ci;

Thread.CurrentThread.CurrentUICulture = ci; }

Page 7: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

public string GetCurrent()

{

var iosLocaleAuto =

NSLocale.AutoUpdatingCurrentLocale.LocaleIdentifier; var

iosLanguageAuto =

NSLocale.AutoUpdatingCurrentLocale.LanguageCode; var

iosLocale = NSLocale.CurrentLocale.LocaleIdentifier; var iosLanguage =

NSLocale.CurrentLocale.LanguageCode; var

netLocale = iosLocale.Replace("_", "-"); var

netLanguage = iosLanguage.Replace("_", "-");

if (NSLocale.PreferredLanguages.Length > 0)

{

var pref = NSLocale.PreferredLanguages[0];

netLanguage = pref.Replace("_", "-");

if (NSLocale.AutoUpdatingCurrentLocale.LanguageCode == "gsw")

{

netLanguage = "de-CH";

}

}

return netLanguage;

}

}

Listagem 5. Classe de idioma no iOS

No iOS o processo de pegar o idioma corrente, é bem diferente do Android. No projeto Xamarin, crie uma

classe chamada “Translator” e adicione um método estático:

public static void Translate()

{

DependencyService.Get().SetLocale();

var netLanguage =

DependencyService.Get().GetCurrent();

AppResource.Culture = new

CultureInfo(netLanguage); }

Pegamos o idioma da plataforma e atribuímos para o nosso projeto. Para usar o código da classe anterior, no

arquivo App.xaml.cs, antes de chamar a tela principal do projeto, use o seguinte código:

Translator.Translate();

Adicione ou altere o Label da página principal e atribua ao mesmo o resource AppName, via código C#:

labelTraducao.Text = ResourcesString.AppResource.AppName;

Page 8: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Usando um emulador ou dispositivo físico, basta alterar o idioma do mesmo que o nosso projeto será

“traduzido” (Figura 4).

Figura 04. Projeto traduzido

Muito simples e fáil. Mas e no XAML? Eu tenho como atribuir um Resource diretamente no XAML? Nativamente,

não. Para fazer isso, vamos usar uma classe auxiliar para adicionarmos os resources no XAML. Crie uma classe chamada

“TranslateExtension”. Na Listagem 6 temos o código dessa classe.

[ContentProperty("Text")]

public class TranslateExtension : IMarkupExtension

public class Locale : ILocale

{

readonly CultureInfo ci = null; const string ResourceId = "ResourcesSample.ResourcesString.AppResource";

public TranslateExtension()

{

if (Device.OS == TargetPlatform.iOS ||

Device.OS == TargetPlatform.Android)

{

ci = new CultureInfo(DependencyService.Get().GetCurrent());

}

}

public string Text { get; set; }

public object ProvideValue(IServiceProvider serviceProvider)

{

if (Text == null)

return "";

Assembly ressourceAssembly = Assembly.Load("ResourcesSample");

ResourceManager temp = new ResourceManager(ResourceId,

ressourceAssembly);

var translation = temp.GetString(Text, ci);

if (translation == null)

{

throw new ArgumentException(

String.Format("Key '{0}' was not found in resources '{1}' for

culture '{2}'.", Text, ResourceId, ci.Name), "Text");

translation = Text;

}

return translation;

}

}

Listagem 6. Classe para atribuir Resources no XAML

Page 9: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Atenção em alguns pontos. ResourceId é o valor namespace + arquivo RESX, pode ser diferente no seu projeto.

Em Assembly.Load devemos passar o nome do projeto do Xamarin, nesse exemplo: “ResourcesSample”.

Crie uma nova página (ou use a existente) e vamos declarar o namespace da classe no ContentPage:

xmlns:helpers="clr-

namespace:ResourcesSample.Classe;assembly=ResourcesSample"

Tome cuidado, pois primeiro indicamos o namespace e no segundo apenas o assembly. E para atribuir o valor

do Resource no XAML, basta usar, por exemplo:

Text="{helpers:TranslateExtension AppName}"

Pronto, nosso projeto continua multi-idiomas e podemos atribuir os resources no XAML, deixando o trabalho

mais simples.

Conclusão

Vimos neste artigo, como trabalhar com navegação de páginas dentro de aplicações mobile no Xamarin Forms.

Também aprendemos como é fácil usar páginas modais e telas com abas para facilitar a organização e uma tela de um

aplicativo.

No próximo artigo, veremos como trabalhar com estilos para aplicações Xamarin Forms, onde vamos concentrar

as características visuais de um controle e usar a mesma em toda a aplicação. Aprenderemos também como criar um

aplicativo multi-idioma.

Sobre o Autor

Luciano Pimenta (NOVO DOMINIO: www.lucianopimenta.com) é desenvolvedor Delphi/C# para aplicaÇÕes Web com ASP.NET,

Windows com Win32 e Windows Forms com .NET. Palestrante da 4° edição da Borland Conference (BorCon) e da 1° Delphi Conference. É MVP Embarcadero, grupo de profissionais que ajudam a divulgar o Delphi no mundo. Atualmente é desenvolvedor da SoftDesign fábrica de softwares em Porto Alegre-RS. Autor de mais de 80 artigos e de mais de 600 vídeos aulas publicadas em revistas e sites especializados, além de treinamentos presenciais e multimídias. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados.

E-mail: www.lucianopimenta.net

Page 10: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Windows Forms – Implementando a API do

Google Drive – Parte 1

Caro amigo leitor,

Este mês vou redigir a primeira parte do artigo “Implementando a API do Google Drive” junto com a

linguagem C# e Formulários Windows. Farei o acesso desta API utilizando o Microsoft Visual Studio Community 2019.

A ideia inicial será a de habilitar esta API do Google Drive em uma conta “GOOGLE” e gerar o arquivo de

credenciais (formato JSON) pelo “ID do Cliente”, o qual é necessário para o seu acesso completo.

Passo a passo

O pré-requisito para esta tarefa será o de possuir um cadastro no google. Após, clique no link abaixo para se

deparar com a figura 01, o qual fará a autenticação necessária.

https://console.developers.google.com/flows/enableapi?apiid=drive

Figura 01. Autenticação do Google.

Após clicar no botão “Próxima” teremos a tela de registro inicial (Figura 02)

Page 11: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Figura 02. Registro.

Selecione um projeto em que seu pedido será registrado ou podemos também criar um novo projeto. No meu

caso eu criei um novo projeto.

Recomendo fazer uma leitura com muita atenção nos termos de “serviço do Google Clouf Platform” e também

nos “termos de serviço de quais serviços e APIs aplicáveis”.

Podemos também selecionar na combo o país de residência e deixar ou não a opção para recebimento de e-

mails. Clique no botão “Concordar e Continuar” e consequentemente API sofrerá o processo de ativação, podendo

demorar alguns minutos.

Receberemos uma mensagem informativa na próxima tela, indicando que a API está ativada. Deveremos acessar

as credenciais clicando no botão “Acessar credenciais”. Ver Imagem 03.

Figura 03. Acesso das credenciais.

Neste momento nos deparamos com algumas configurações das credenciais presentes em nosso projeto.

Deveremos informar a API “Google Drive API” e de qual aplicativo iremos chamá-la. Trabalharemos com

Windows Forms, portanto escolheremos a opção “Outra UI (por exemplo, Windows, ferramenta CLI)”. Checaremos

também o tipo de dado “Dados do usuário”, o qual dará acesso a todas as pastas e arquivos contidos no Google Drive.

Page 12: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Por final clique no link “ID do cliente”. Todos os detalhes estão presentes na Figura 04.

Figura 04. Configurações das credenciais.

Figura 05. Criação ID do Cliente.

Caso receber a mensagem da Figura 05, clique no botão “Configurar tela de consentimento”.

Nesta etapa informaremos um nome do aplicativo. Importante lembrar que nesta tela também poderemos setar

um logotipo, e-mail para suporte, adicionar escopos, informar domínios autorizados, definir alguns links de autorizações,

política de privacidade, termos de serviços, entre outras coisas. Por final clique no botão “Salvar”. Voltaremos na tela

anterior, a qual nos possibilitará gerar um token de identificação exclusiva. Selecione a opção “Outro” e indique um

nome qualquer. Ver Imagem 06.

Page 13: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Figura 06. Tela de consentimento Oauth.

Informamos o tipo de aplicativo (Outro) seguido do nome do mesmo (TheClub). Ao clicar no botão “Criar”

finalizaremos esta etapa. Através da Imagem 07 poderemos conferir maiores detalhes.

Figura 07. Criação ID do Cliente.

Após a criação do mesmo teremos o ID e a chave secreta do cliente. Estes são os dados que precisaremos para

implementar na rotina em nossa aplicação Windows Forms. (Figura 08)

Page 14: Editorial - theclub.com.br · Editorial Caro amigo, Estamos quase na metade deste ano de 2019 e graças a Deus com muita saúde, paz e sucesso. Nossa equipe sempre procura diversificar

Figura 08. ID e chave secreta do cliente.

Finalmente faremos o download do arquivo em formato “json”, clicando no item conforme ilustra a

imagem abaixo. Armazene este arquivo no mesmo local onde iremos programar o exemplo. Ver Imagem 09.

Figura 09. Download.

Conclusões

Neste primeiro artigo procurei discutir de uma forma bem rápida e prática todos os passos necessários para registrar e

obter os dados para realização do acesso via API do Google Drive. No próximo artigo farei a implementação deste

junto com aplicações Windows Forms, realizando a manipulação completa de arquivos. Desejo uma ótima leitura, um

abraço e até o mês que vem!

Referências

https://developers.google.com/drive/

Sobre o Autor

Thiago Cavalheiro Montebugnoli adora aprender novas tecnologias. Formado pela Faculdade de Tecnologia de Botucatu – SP (FATEC), já desenvolveu softwares utilizando a plataforma .NET, Delphi junto com Banco de Dados SQL Server e Firebird. Como experiências profissionais mais recentes, possui em seu currículo sua atuação no Centro de Processamento de Dados da Prefeitura Municipal de Itaí-SP e atualmente compõe a equipe da Coordenadoria Tecnologia da Informação no IFSP – Instituto Federal do Estado de São Paulo em Avaré. Além disso, é colunista mensal da Revista The Club Megazine e é consultor Técnico do The Club. Possui as seguintes certificações: MCP - Microsoft Certified Professional, MCTS - Microsoft Certified Technology Specialist, MCAD - Microsoft Certified Application Developer e MCSD - Microsoft Certified Solution Developer.

E-mail: [email protected]