Neste artigo veremos como criar um leiaute master detail usando os recursos do Shell no Xamarin Forms 4.x. |
Vimos que o Shell introduz um contêiner simples para seus aplicativos móveis, assim , ao invés usar uma combinação de MasterDetailPage, TabbedPage e NavigationPage, basta iniciar seu aplicativo com um Shell e começar a adicionar páginas.
O Shell fornece três tipos de interface de usuário de navegação comum:
Para criar uma experiência master-detail vamos usar o recurso do Menu flyout de navegação.
O flyout é o menu raiz de um aplicativo Shell e é acessível por meio de um ícone ou passando o dedo na lateral da tela. O submenu consiste em um cabeçalho opcional, itens de submenu e itens de menu opcionais.
O flyout pode ser acessado através do ícone do hambúrguer ou passando pela lateral da tela.
Recursos usados:
Criando o projeto no Visual Studio 2019 Community (preview 8)
Abra o VS 2019 Community e clique em Create New Project e a seguir escolha:
Clique em Next e informe o nome XF_Flyout1;
A seguir clique no botão Create :
A seguir selecione o template Blank e a plataforma Android e clique no botão OK:
Pronto, nosso projeto já esta criado.
No projeto Android na pasta Resource/drawable vamos incluir 4 imagens que iremos usar no projeto:
Agora abra a página MainPage.xaml e altere o código existente pelo código a seguir:
<?xml
version="1.0" encoding="utf-8" ?> <Shell xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:controls="clr-namespace:XF_Shell2.Controls" xmlns:views ="clr-namespace:XF_Shell2.Views" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XF_Shell2.MainPage" Title="Menu">
<Shell.FlyoutHeader> </Shell> |
Não esqueça de abrir o arquivo MainPage.xaml.cs e alterar o código para que a página herde de Shell:
using System.ComponentModel;
using Xamarin.Forms;
namespace XF_Shell2
{
[DesignTimeVisible(false)]
public partial class MainPage : Shell
{
public MainPage()
{
InitializeComponent();
}
}
} |
Criando o header do menu Flyout e demais Views
Agora vamos criar no projeto as pastas Controls e Views e na pasta Controls vamos incluir uma Content View chamada FlyoutHeader.xaml que será o header do menu e onde vamos exibir um imagem:
<?xml version="1.0" encoding="UTF-8"?>
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="XF_Shell2.Controls.FlyoutHeader"
HeightRequest="100">
<Grid BackgroundColor="Black">
<Image Aspect="AspectFit" Source="macologo.jpg" Opacity="0.6" />
</Grid>
</ContentView>
|
Na pasta Views vamos criar 3 Views to tipo Content Page que irão apenas exibir uma label com o nome da página.
Não precisamos fazer mais nada...
Executando o projeto iremos obter o seguinte resultado:
Segundo a documentação em um aplicativo Shell, cada ContentPage que é filho de um objeto ShellContent é criado durante a inicialização do aplicativo.
Adicionar objetos ShellContent adicionais usando essa abordagem resultará na criação de páginas adicionais durante a inicialização do aplicativo, o que pode levar a uma experiência de inicialização ruim.
No entanto, o Shell também é capaz de criar páginas sob demanda, em resposta à navegação.
Assim o código da página MainPage.xaml pode ser resumido para ficar assim:
<?xml version="1.0" encoding="utf-8" ?>
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
xmlns:controls="clr-namespace:XF_Shell2.Controls"
xmlns:views ="clr-namespace:XF_Shell2.Views"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="XF_Shell2.MainPage"
Title="Menu">
<Shell.FlyoutHeader>
<controls:FlyoutHeader />
</Shell.FlyoutHeader>
<FlyoutItem Title="Pesquisa"
Icon="pequisar.png">
<views:PesquisaPage />
</FlyoutItem>
<FlyoutItem Title="Suporte"
Icon="suporte.png">
<views:SuportePage />
</FlyoutItem>
<FlyoutItem Title="Editar"
Icon="editar.png">
<views:EditarPage />
</FlyoutItem>
</Shell>
|
Ou ainda desta forma:
<?xml
version="1.0" encoding="utf-8" ?> <Shell xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:d="http://xamarin.com/schemas/2014/forms/design" xmlns:controls="clr-namespace:XF_Shell2.Controls" xmlns:views ="clr-namespace:XF_Shell2.Views" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="XF_Shell2.MainPage" Title="Menu">
<Shell.FlyoutHeader>
<views:PesquisaPage IconImageSource="pequisar.png"
/> </Shell> |
Pegue o código do projeto compartilhado aqui : XF_Shell2.zip (sem as referências)
"Porque
onde há inveja e espírito faccioso aí há perturbação e toda a obra perversa.
Mas a sabedoria que do alto vem é, primeiramente pura, depois pacífica,
moderada, tratável, cheia de misericórdia e de bons frutos, sem parcialidade, e
sem hipocrisia."
Tiago 3:16,17
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
Xamarim - Desenvolvimento Multiplataforma com C# ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Criando sua primeira ... - Macoratti.net
Xamarin.Forms - Olá Mundo - Anatomia da aplicação - Macoratti.net
https://developer.xamarin.com/api/type/Android.Widget.ListView/
https://developer.xamarin.com/api/property/Android.Widget.ListView.Adapter/
https://developer.xamarin.com/guides/xamarin-forms/user-interface/animation/