Tudo bem pessoal!
O post de hoje é sobre o menu sanduíche ou o Master-Detail Page.
Muita gente utiliza este recurso em suas aplicações e realmente fica bem bacana. Vou mostrar como utiliza-lo em sua aplicação com alguma modificações, ou seja, você pode customizá-lo, colocando imagens por exemplo.
O resultado final será:
Menu
O fonte de criação do menu já foi feito pela equipe do Xamarin logo ficaremos apenas com a parte de customizá-lo.
A primeira coisa a ser feita é criar o projeto, acredito que você já saiba. Escolhi o projeto Cross-Plataform ->XamarinForms Portable.
Agora vamos criar três pastas para estruturar melhor nosso projeto. As pasta são :
- Menu : Implementação relacionada ao menu;
- Views: Todas as telas do aplicativo;
- Model: Modelo de domínio de uma aplicação.
Estrutura de pastas da solução
Como já foi dito, a implementação do menu já esta pronta e o que vamos fazer e customizar de acordo com a nossa necessidade. Vamos criar as classes MenuListView, MenuPage e MenuCell.
A classe MenuListView é responsável por retornar a lista de opções do menu, na nossa aplicação criei as opções “Editar” e “Configurações”. Em cada item desta lista podemos definir o título, a cor do texto, estilo, ícone e qual página ele irá abrir.
private List < ItemMenu > GetMenuItemList() {
List < ItemMenu > lstItemMenu = new List < ItemMenu > ();
lstItemMenu.Add(new ItemMenu() {
Title = "Editar",
TitleColor = Color.FromHex("454545"),
TitleWeight = FontAttributes.Bold,
IconSource = "ic_edit.png",
TargetType = typeof(FirstPage)
});
return lstItemMenu;
}
A classe MenuPage é o nosso menu, nele é criar toda a organização dos controles (Labels, StackLayout, botões, Listview). O nosso menu terá um stacklayout que possui dentro dele dois label de identificação e o controle Image. Utilizei o plugin Image Circle Control para dar o contorno redondo na imagem. Ficou bem bacana o resultado final.
Parte superior do menu.
Note que em cada opção do menu existe um ícone e um texto ao lado, esta implementação esta na classe MenuCell. Vou explicar melhor. Como eu disse, o nosso menu tem um Stacklayout e um Listview. Dentro do Listview se encontra as opções, estas opções são as cells do Listview e podemos customizá-las. Para customizar a cell do Listview foi criado um Stacklayout com Image e um Label dentro dele.
Cell customizada com ícone e texto
Agora vamos falar das nossas Views, criaremos duas para realizar as trocas de telas. As telas são a FirstPage e SecondPage.
A classe MastePage herda da MasterDetailPage, dentro do seu construtor instanciamos a MenuPage e definimos as propriedades Master e Detail.
public class MasterPage: MasterDetailPage {
MenuPage objMenuPage;
public MasterPage() {
objMenuPage = new MenuPage();
objMenuPage.lstMenuItem.ItemSelected += (object sender, SelectedItemChangedEventArgs e) => {
NavigateTo(e.SelectedItem as ItemMenu);
};
Master = objMenuPage;
Detail = new NavigationPage(new FirstPage()) {};
}
private void NavigateTo(ItemMenu objItemMenu) {
Page objPageDisplay;
if (objItemMenu == null) {
return;
}
objPageDisplay = (Page) Activator.CreateInstance(objItemMenu.TargetType);
Detail = new NavigationPage(objPageDisplay);
objMenuPage.lstMenuItem.SelectedItem = null;
IsPresented = false;
}
}
Agora é chamar o MenuPage na Class App e rodar.
public class App: Application {
public App() {
MainPage = new MasterPage();
}
}
O projeto esta disponível aqui.
Referências
https://developer.xamarin.com/guides/xamarin-forms/user-interface/navigation/master-detail-page/