In Focus

Xamarin.Forms - Working With Material Design

In this article, you will learn how to use material design in Xamarin.Forms.

Introduction

 
 
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem.
 
This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
 

Material

 
Material Design is introduced in Xamarin.Forms 3.6.
 
Material Design is a design system created by Google, that prescribes the size, color, spacing, and other aspects of how Views and layouts should look and behave.
  • Visual="Material"
  • Visual="Default"
Note
On Android, the material renderers require a minimum version of 5.0 (API 21) or greater, and a TargetFramework of version 9.0 (API 28).
 
In addition, your platform project requires Android support libraries 28.0.0 or greater, and its theme needs to inherit from a Material Components theme or continue to inherit from an AppCompat theme.
 
Material renderers are currently included the following Controls,
  1. Button
  2. Entry
  3. Frame
  4. ProgressBar
  5. DatePicker
  6. TimePicker
  7. Picker
  8. ActivityIndicator
  9. Editor
  10. Slider
  11. Stepper
More information about Material
https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/visual/material-visual
 
Prerequisites
  • Visual Studio 2017 or later (Windows or Mac)

Setting up a Xamarin.Forms Project

 
Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.
 
Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.
 
Now, you need to click "Create a new project".
 
 
Now, filter by Project Type: Mobile
 
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.
 
Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".
 
Now, select the blank app and target platforms - Android, iOS and Windows (UWP).
 
Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select the XAML page and double-click to open the MainPage.Xaml page.
 
You now have a basic Xamarin.Forms app. Click the Play button to try it out.
 
NuGet Packages
 
Now, add the following NuGet Packages.
  • Xamarin.Forms.Visual.Material

Add Xamarin.Forms.Visual.Material NuGet

 
Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "Xamarin.Forms.Visual.Material" and add Package. Remember to install it for each project (.NET Standard, Android, iOS).
 
Note
Before you initialize Xamarin.Forms in your MainActivity.cs and AppDelegate, you must Initialize FormsMaterial.Init()
  1. FormsMaterial.Init();  
Android Implementation
 
MainActivity.cs
  1. protected override void OnCreate(Bundle savedInstanceState)  
  2.         {  
  3.             TabLayoutResource = Resource.Layout.Tabbar;  
  4.             ToolbarResource = Resource.Layout.Toolbar;  
  5.   
  6.             //SetStatusBarColor(global::Android.Graphics.Color.Black);  
  7.   
  8.             base.OnCreate(savedInstanceState);  
  9.             global::Xamarin.Forms.Forms.Init(this, savedInstanceState);  
  10.         global::Xamarin.Forms.FormsMaterial.Init(this, savedInstanceState);  
  11.         LoadApplication(new App());  
  12.         }  
iOS Implementation
 
AppDelegate.cs
  1. public override bool FinishedLaunching(UIApplication app, NSDictionary options)  
  2.         {  
  3.               
  4.             global::Xamarin.Forms.Forms.Init();  
  5.             global::Xamarin.Forms.FormsMaterial.Init();  
  6.             LoadApplication(new App());  
  7.   
  8.             return base.FinishedLaunching(app, options);  
  9.         } 

Setting up the User Interface

 
In this step, I added material design. 
  1. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"    
  2.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"    
  3.              xmlns:sys="clr-namespace:System;assembly=mscorlib"    
  4.              x:Class="VisualChallenge.VisualChallengePage"    
  5.              Shell.NavBarIsVisible="True"    
  6.              BackgroundColor="White"    
  7.              Title="Visual Challenge"    
  8.              >    
  9.     <ContentPage.ToolbarItems>    
  10.         <ToolbarItem Order="Primary" Text="Add"></ToolbarItem>    
  11.         <ToolbarItem Order="Secondary" Priority="0" Text="Update"></ToolbarItem>    
  12.     </ContentPage.ToolbarItems>    
  13.     <!-- If you decide to change out the flexlayout leave the scroll view here    
  14.          Currently, there's a bug in the shell that will set margins wrong if the content is not in a scrollview    
  15.     -->    
  16.     <ScrollView>    
  17.         <StackLayout Margin="20" >    
  18.     
  19.             <Editor  Placeholder="EnterSomeThing"></Editor>    
  20.             <Frame Visual="Material" HeightRequest="150" WidthRequest="150" CornerRadius="5" BorderColor="Red">    
  21.                 <Image Source="monkey.jpg"></Image>    
  22.             </Frame>    
  23.             <Frame BorderColor="LightGray">    
  24.                 <Grid Visual="Material">    
  25.                     <Grid.ColumnDefinitions>    
  26.                         <ColumnDefinition Width="*"/>    
  27.                         <ColumnDefinition Width="*"/>    
  28.                     </Grid.ColumnDefinitions>    
  29.                     <Grid.RowDefinitions>    
  30.                         <RowDefinition Height="200"/>    
  31.                         <RowDefinition Height="200"/>    
  32.                     </Grid.RowDefinitions>    
  33.                     <Frame Grid.Row="0" Visual="Material" Grid.Column="0" BorderColor="LightGray">    
  34.                         <StackLayout >    
  35.                             <Label Text="Monkey"></Label>    
  36.                             <Image Aspect="AspectFit" Source="monkey1.jpg"></Image>    
  37.                         </StackLayout>    
  38.                     </Frame>    
  39.     
  40.                     <Frame Grid.Row="0" Grid.Column="1" BorderColor="LightGray">    
  41.                         <StackLayout >    
  42.                             <Label Text="Monkey"></Label>    
  43.                             <Image Aspect="AspectFit" Source="monkey2.jpg"></Image>    
  44.                         </StackLayout>    
  45.                     </Frame>    
  46.                     <Frame Grid.Row="1" Grid.Column="0" BorderColor="LightGray">    
  47.                         <StackLayout >    
  48.                             <Label Text="Monkey"></Label>    
  49.                             <Image Aspect="AspectFit" Source="monkey3.jpg"></Image>    
  50.                         </StackLayout>    
  51.                     </Frame>    
  52.     
  53.                     <Frame Grid.Row="1" Grid.Column="1" BorderColor="LightGray">    
  54.                         <StackLayout >    
  55.                             <Label Text="Monkey"></Label>    
  56.                             <Image Aspect="AspectFit" Source="monkey4.jpg"></Image>    
  57.                         </StackLayout>    
  58.                     </Frame>    
  59.                 </Grid>    
  60.             </Frame>    
  61.                 
  62.         </StackLayout>    
  63.     </ScrollView>    
  64. </ContentPage>     
Click the "Play" button to try it out.
 
Android Design
 
 
 
iOS Design
 
 
 
I hope you have understood how to use Material design in Xamarin.Forms.
 
Thanks for reading. Please share your comments and feedback.
 
Happy Coding :)