Usando o Xamarin.Android Designer

Este artigo é um passo a passo do Xamarin.Android Designer. Ele demonstra como criar uma interface de usuário para um aplicativo de navegador de cores pequenas; essa interface de usuário é criada inteiramente no Designer.

Visão geral

As interfaces de usuário do Android podem ser criadas declarativamente usando arquivos XML ou programaticamente escrevendo código. O Xamarin.Android Designer permite que os desenvolvedores criem e modifiquem layouts declarativos visualmente, sem exigir edição manual de arquivos XML. O Designer também fornece feedback em tempo real que permite ao desenvolvedor avaliar as alterações da interface do usuário sem precisar reimplantar o aplicativo em um dispositivo ou em um emulador. Esses recursos do Designer podem acelerar tremendamente o desenvolvimento da interface do usuário do Android. Este artigo demonstra como usar o Xamarin.Android Designer para criar visualmente uma interface do usuário.

Dica

As versões mais recentes do Visual Studio dão suporte à abertura de arquivos .xml dentro do Android Designer.

Tanto arquivos .axml quanto .xml são compatíveis com o Android Designer.

Passo a passo

O objetivo deste passo a passo é usar o Android Designer para criar uma interface de usuário para um aplicativo de navegador de cores de exemplo. O aplicativo navegador de cores apresenta uma lista de cores, seus nomes e seus valores RGB. Você aprenderá como adicionar widgets ao Design Surface, bem como dispor esses widgets visualmente. Depois disso, você aprenderá a modificar widgets interativamente na Superfície de Design ou usando o painel Propriedades do Designer. Finalmente, você verá como o design fica quando o aplicativo é executado em um dispositivo ou emulador.

Crie um novo projeto

O primeiro passo é criar um novo projeto Xamarin.Android. Inicie o Visual Studio, clique em Novo Projeto ..., e escolha o modelo Visual C# > Android > Android App (Xamarin). Nomeie o novo aplicativo como DesignerPasso a passo e clique em OK.

Android blank app

Na caixa de diálogo Novo aplicativo Android, escolha Aplicativo em branco e clique em OK:

Selecting the Android Blank App template

Adicionando um layout

A próxima etapa é criar um LinearLayout que manterá os elementos da interface do usuário. Clique com o botão direito do mouse em Recursos/layout no Gerenciador de Soluções e selecione Adicionar > Novo Item.... Na caixa de diálogo Adicionar Novo Item, selecione Layout do Android. Nomeie o arquivo list_item e clique em Adicionar:

New layout

O novo layout list_item é exibido no Designer. Observe que dois painéis são exibidos – a Superfície de Design do list_item fica visível no painel esquerdo, enquanto sua origem XML é mostrada no painel direito. Você pode trocar as posições dos painéis Superfície de Design e Origem clicando no ícone Painéis de Permuta localizado entre os dois painéis:

Designer view

No menu Exibir, clique em Outra Estrutura de Tópicos do Documento do Windows > para abrir a Estrutura de Tópicos do Documento. A Estrutura de Tópicos do Documento mostra que o layout atualmente contém um único widget LinearLayout :

Document outline

A próxima etapa é criar a interface do usuário para o aplicativo de navegador de cores dentro deste LinearLayout.

Criando a interface do usuário do Item de Lista

Se o painel Caixa de Ferramentas não estiver sendo exibido, clique na guia Caixa de Ferramentas à esquerda. Na Caixa de Ferramentas, role para baixo até a seção Imagens & Mídia e role para baixo até localizar um ImageView:

Locate ImageView

Como alternativa, você pode inserir ImageView na barra de pesquisa para localizar o ImageView:

ImageView search

Arraste-o ImageView para a Superfície de Design (isso ImageView será usado para exibir uma amostra de cores no aplicativo do navegador de cores):

ImageView on canvas

Em seguida, arraste um LinearLayout (Vertical) widget da Caixa de Ferramentas para o Designer. Observe que um contorno LinearLayoutazul indica os limites do arquivo . A estrutura de tópicos do documento mostra que ele é um filho de LinearLayout, localizado em imageView1 (ImageView):

Blue outline

Quando você seleciona o ImageView no Designer, o contorno azul se move para cercar o ImageView. Além disso, a seleção é movida para imageView1 (ImageView) na Estrutura de Tópicos do Documento:

Select ImageView

Em seguida, arraste um Text (Large) widget da Caixa de Ferramentas para o LinearLayoutarquivo . Observe que o Designer usa realces verdes para indicar onde o novo widget será inserido:

Green highlights

Em seguida, adicione um Text (Small) widget abaixo do Text (Large) widget:

Add small text widget

Neste ponto, a superfície do Designer deve ser semelhante à seguinte captura de tela:

Screenshot shows the Designer surface with Toolbox, Document Outline, and layout area with small text selected.

Se os dois textView widgets não estiverem dentro linearLayout1do , você poderá arrastá-los para linearLayout1 dentro da Estrutura de Tópicos do Documento e posicioná-los para que apareçam conforme mostrado na captura de tela anterior (recuada em linearLayout1).

Organizando a interface do usuário

A próxima etapa é modificar a interface do usuário para exibir o ImageView à esquerda, com os dois TextView widgets empilhados à direita do ImageView.

  1. Selecione o ImageView.

  2. Na janela Propriedades, digite largura na caixa de pesquisa e localize Largura do layout.

  3. Altere a configuração Largura do layout para wrap_content:

Set wrap content

Outra maneira de alterar a Width configuração é clicar no triângulo no lado direito do widget para alternar sua configuração de largura para wrap_content:

Drag to set width

Clicar no triângulo novamente retorna a Width configuração para match_parent. Em seguida, vá para o painel Estrutura de Tópicos do Documento e selecione a raiz LinearLayout:

Select root LinearLayout

Com a raiz LinearLayout selecionada, retorne ao painel Propriedades , insira a orientação na caixa de pesquisa e localize a configuração Orientação . Altere a orientação para horizontal:

Select horizontal orientation

Neste ponto, a superfície do Designer deve ser semelhante à captura de tela a seguir. Observe que os TextView widgets foram movidos para a direita do ImageView:

Screenshot shows the Designer surface with Toolbox, Document Outline, and layout area.

Modificando o espaçamento

A próxima etapa é modificar as configurações de preenchimento e margem na interface do usuário para fornecer mais espaço entre os widgets. Selecione o ImageView na superfície Design. No painel Propriedades, digite min na caixa de pesquisa. Digite 70dp para Altura mínima e 50dp Largura mínima:

Set height and width

No painel Propriedades, digite na caixa de pesquisa e digite padding 10dp para Preenchimento. Essas minHeighte padding configurações adicionam preenchimento em todos os lados e ImageView o alongam minWidth verticalmente. Observe que o XML do layout é alterado à medida que você insere estes valores:

Set padding

As configurações de preenchimento inferior, esquerda, direita e superior podem ser definidas independentemente inserindo valores nos campos Preenchimento Inferior, Preenchimento Esquerdo, Preenchimento Direita e Preenchimento Superior, respectivamente. Por exemplo, defina o campo Preenchimento Esquerdo como 5dp e os campos Preenchimento Inferior, Preenchimento Direita e Preenchimento Superior como 10dp:

Custom padding settings

Em seguida, ajuste a LinearLayout posição do widget que contém os dois TextView widgets. Na Estrutura de Tópicos do Documento, selecione linearLayout1. Na janela Propriedades, digite margin na caixa de pesquisa. Defina Margem de layout inferior, Margem de layout esquerda e Margem de layout superior como 5dp. Defina a margem do layout à direita como 0dp:

Set margins

Removendo a imagem padrão

Como o ImageView está sendo usado para exibir cores (em vez de imagens), a próxima etapa é remover a fonte de imagem padrão adicionada pelo modelo.

  1. Selecione o ImageView na superfície do Designer.

  2. Em Propriedades, digite src na caixa de pesquisa.

  3. Clique no pequeno quadrado à direita da configuração da propriedade Src e selecione Redefinir:

Clear the ImageView src setting

Isso remove android:src="@android:drawable/ic_menu_gallery" do XML de origem para esse ImageView.

Adicionando um contêiner ListView

Agora que o layout list_item está definido, a próxima etapa é adicionar um ListView ao layout principal. Ele ListView conterá uma lista de list_item.

No Gerenciador de Soluções, abra Recursos/layout/activity_main.axml. Na Caixa de Ferramentas, localize o widget e arraste-o ListView para a Superfície de Design. O ListView no Designer ficará em branco, exceto para linhas azuis que delineiam sua borda quando ele é selecionado. Você pode exibir a estrutura de tópicos do documento para verificar se o ListView foi adicionado corretamente:

New ListView

Por padrão, o ListView recebe um Id valor de @+id/listView1. Enquanto listView1 ainda estiver selecionado na Estrutura de Tópicos do Documento, abra o painel Propriedades, clique em Organizar por e selecione Categoria. Abra Main, localize a propriedade Id e altere seu valor para @+id/myListView:

Rename id to myListView

Neste ponto, a interface do usuário está pronta para uso.

Executando o aplicativo

Abra MainActivity.cs e substitua seu código pelo seguinte:

using Android.App;
using Android.Widget;
using Android.Views;
using Android.OS;
using Android.Support.V7.App;
using System.Collections.Generic;

namespace DesignerWalkthrough
{
    [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        List<ColorItem> colorItems = new List<ColorItem>();
        ListView listView;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.activity_main);
            listView = FindViewById<ListView>(Resource.Id.myListView);

            colorItems.Add(new ColorItem()
            {
                Color = Android.Graphics.Color.DarkRed,
                ColorName = "Dark Red",
                Code = "8B0000"
            });
            colorItems.Add(new ColorItem()
            {
                Color = Android.Graphics.Color.SlateBlue,
                ColorName = "Slate Blue",
                Code = "6A5ACD"
            });
            colorItems.Add(new ColorItem()
            {
                Color = Android.Graphics.Color.ForestGreen,
                ColorName = "Forest Green",
                Code = "228B22"
            });

            listView.Adapter = new ColorAdapter(this, colorItems);
        }
    }

    public class ColorAdapter : BaseAdapter<ColorItem>
    {
        List<ColorItem> items;
        Activity context;
        public ColorAdapter(Activity context, List<ColorItem> items)
            : base()
        {
            this.context = context;
            this.items = items;
        }
        public override long GetItemId(int position)
        {
            return position;
        }
        public override ColorItem this[int position]
        {
            get { return items[position]; }
        }
        public override int Count
        {
            get { return items.Count; }
        }
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var item = items[position];

            View view = convertView;
            if (view == null) // no view to re-use, create new
                view = context.LayoutInflater.Inflate(Resource.Layout.list_item, null);
            view.FindViewById<TextView>(Resource.Id.textView1).Text = item.ColorName;
            view.FindViewById<TextView>(Resource.Id.textView2).Text = item.Code;
            view.FindViewById<ImageView>(Resource.Id.imageView1).SetBackgroundColor(item.Color);

            return view;
        }
    }

    public class ColorItem
    {
        public string ColorName { get; set; }
        public string Code { get; set; }
        public Android.Graphics.Color Color { get; set; }
    }
}

Esse código usa um adaptador personalizado ListView para carregar informações de cor e exibir esses dados na interface do usuário que acabou de ser criada. Para manter este exemplo curto, as informações de cor são codificadas em uma lista, mas o adaptador pode ser modificado para extrair informações de cor de uma fonte de dados ou calculá-las em tempo real. Para obter mais informações sobre ListView adaptadores, consulte ListView.

Compile e execute o aplicativo. A captura de tela a seguir é um exemplo de como o aplicativo aparece ao ser executado em um dispositivo:

Final screenshot

Resumo

Este artigo percorreu o processo de usar o Xamarin.Android Designer no Visual Studio para criar uma interface de usuário para um aplicativo básico. Ele demonstrou como criar a interface para um único item em uma lista e ilustrou como adicionar widgets e esquematizá-los visualmente. Ele também explicou como atribuir recursos e, em seguida, definir várias propriedades nesses widgets.