When designing a View (Page) we need to take into consideration that there might be a lot of content to show. Typically we should use a
ListView, which by default is scrollable. However, what if you have to show more than one
ListView on a single page? Nesting
ScrollViews is a very bad practice that should be avoided unless natively supported. In this case it will most probably make sense to put all the content within a single
ScrollView. But how? Here is where the
BindableStackLayout comes into play.
Continue reading “Repeater or Bindable StackLayout”
Setting a letter spacing for a
Label in Android and iOS turned into an interesting research for me. I would expect that such a common task would be easily done with a help of a
Renderer or an
Effect. However, I was very surprised to discover that some platforms do not have a built-in support for setting letter spacing.
Continue reading “Xamarin.Forms Recipe: Label with Letter Spacing”
It is very common nowadays to express ourselves by using emojis. Instead of typing few words, we prefer to send one emoji that will express our feelings and emotions. Not sure that the other side will always get what we mean by sending a 🧞 , but that is another story.
In this article we will learn:
- How to use emojis in static content like Labels and Buttons
- How to define and use emoji in XAML only
- How to define and use emoji using C#
Continue reading “The ultimate guide to Emojis 🤹♂️”
We live in a great time where technology evolves fast and we need to keep up with it if we want to stay relevant. Beside this, we also have to be productive, use the latest and greatest tools, implement the best available solutions and deliver on time. Following article mentions a list of most common mistakes we tend to do while using Xamarin.Forms.
Continue reading “Most common mistakes beginners make in Xamarin.Forms”
Being lucky to develop a backend and a Xamarin.Forms clients on your own? Sooner or later you will have to debug the API calls and it might become painful. Unless, you will follow the next rules:
- Configure your API URL to run on 127.0.0.1 instead of a localhost:
// .NET Core Web.Api example
public static IWebHost BuildWebHost(string args) =>
- Configure your Xamarin.Forms API consumer to have a conditional URL base:
string apiUrl = null;
if (Device.RuntimePlatform == Device.Android)
apiUrl = “http://10.0.2.2:5001/api“;
else if (Device.RuntimePlatform == Device.iOS)
apiUrl = “http://localhost:5001/api“;
throw new UnsupportedPlatformException();
The problem with Android emulator is that it maps 10.0.2.2 to 127.0.0.1, not to localhost. However, the iOS Simulator uses the host machine network.
That should be it!
Many years ago when I was at high school, I wrote a bot for a web browser flags quiz game, where a flag of a random country and 4 different country names where shown to the player. It was fun!
So I created the same game for iOS and Android using Xamarin.Forms just for fun. It is open source and available on github:
This is what you get when an engineer creating a game without a designer. Luckily you can contribute if you have an idea on how to improve the UI/UX or if you want to add new features. I had a couple of them in my head:
- Learning game mode (without time or a game over)
- [X] game mode – where the flag image is covered by some objects that the player has to remove and/or etc.
If you are new to Xamarin.Forms or MVVM I would recommend to check the source code, it is touching the next interesting topics:
- ViewModel first navigation
- Custom fonts
Otherwise you are free to use the source code as you wish since it is under MIT license.
Picker is a very common UI control. In order to capture user input we have to listen to ‘SelectedIndexChanged’ event, which unfortunately behaves differently on Android and iOS:
On iOS ‘SelectedIndexChanged’ is triggered every-time user moves / scrolls the list. ‘Done’ button is there only for hiding the list. However, on Android ‘SelectedIndexChanged’ event will be triggered only once, after user selects an item. This is because on Android the list is displayed as a popup which disappears right after user input.
That may sound as a minor problem, unless you have to do some heavy work on the UI on each ‘SelectedIndexChanged’. Luckily, since Xamarin.Forms 2.3.4 it is possible to set the expected behaviour on the Picker control:
var picker = new Picker();
Alternatively we can do the same thing in XAML.
We have to define a new namespace:
And consume it the next way:
<Picker ios:Picker.UpdateMode=”WhenFinished” .. />
Easy as it is! So there is no need to write workarounds anymore.
P.S.: Additional information can be found here.