Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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
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).
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:
<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.
[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; }
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;
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
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
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)
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.
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.
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)
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]