Although Valentine’s Day isn’t for a few more days, we just couldn’t wait to celebrate the love by sharing a new stable release of Xamarin.Forms – 3.5. Your engagement and contributions with Xamarin have been heartwarming, and we love working with you.
Every month we survey Xamarin developers in Visual Studio and via Twitter while conducting dozens of interviews and listening to your firsthand stories. Why? To make Xamarin better. For you! We have learned that you are more satisfied (+8% for you fans of statistics) with Xamarin when you use our latest versions. Additionally, you have indicated that it is because you like the direction the product is taking and how we are delivering on your specific feedback. Thank you, it’s working!
Let’s take a closer look at what we at Microsoft (in collaboration with you, our fantastic contributors) are delivering in Xamarin.Forms 3.5!
1. Every Layout is Bindable
Perhaps you’re one of the many developers that have been longing for a repeater control; something that can display a group of the same thing without all the overhead of a virtualized list control. Thanks to a wonderful contribution from Andrei Nitescu, we are shipping BindableLayout in 3.5.0. He gave us a thorough look at BindableLayout in an article last month, so let’s summarize by looking at a sample from our own Javier Suarez Ruiz on the Visual Studio for Mac team. In the code below he is creating a horizontal list of friends (good choice putting Miguel first btw):
<StackLayout Orientation = "Horizontal" BindableLayout.ItemsSource = "{Binding Profile.Friends}"> <BindableLayout.ItemTemplate> <DataTemplate> <Grid> <Grid.RowDefinitions> <RowDefinition Height = "*" /> <RowDefinition Height = "Auto" /> </ Grid.RowDefinitions> <imageCircle: CircleImage Grid.Row = "0" Source = "{Binding Picture}" Aspect = "AspectFit" Style = "{StaticResource FriendImageStyle}" /> <Label Grid.Row = "1" Text = "{Binding Name}" Style = "{StaticResource FriendNameStyle}" /> </ Grid> </ DataTemplate> </BindableLayout.ItemTemplate> </ StackLayout>
Breaking down what you see in the XAML above, BindableLayout.ItemsSource
and its siblings are attached properties on StackLayout
, and that could be any Layout<T>
you choose. Set your source to an IEnumerable
, define your template, and you’ve got a repeater! Read more about Javier’s blog example here.
2. Toolbar Accessibility
When you application is accessible, everyone wins, especially your users. The latest version of Xamarin.Forms aims to make application accessibility easier to implement. Three controls that have been notoriously problematic to set up for screen readers are:
- Toolbar items
- MasterDetailPage toggle button
- NavigationPage back button
This pull request ensures that screen readers (VoiceOver etc.) can now access and read the buttons you place in the navigation bar and toolbars. Generally speaking, here are the rules for each platform:
- iOS / UWP will look for values in this order:
AutomationProperties.Name
,AutomationProperties.HelpText
, and thenText
- Android will read the
AutomationProperties.Name
orAutomationProperties.HelpText
when provided, and replace the visibleText
with those values. (this is a current limitation of Android API 25 and lower)
Unifying an API across multiple platforms is rarely easy and straight forward, so for more details about using Automation Properties check out the documentation and refer to the pull request notes.
3. Unsealing the Span
It’s frustrating when attempting to extend a control to run into a sealed class that stops you dead in your tracks. When this happens, please file an issue so we can evaluate the code and unblock you. Such was the case when Michael Rumpler (aka MR.Gestures, or Mister Gestures to me) ran into with Span
(Issue). Graciously, Gerald Versluis did Michael (and all of us) a favor by submitting a pull request. Go team!
4. Community and Hacktoberfest Contributions
The Xamarin.Forms project has enjoyed a wonderful surge of contributions and participation! Whether it was for the t-shirts or just the personal sense of achievement, we are so glad to have you with us. A handful of improvements are now shipping from your efforts in 3.5.0 including:
Contributor | Description |
---|---|
Akihiko Odaki |
[XamlC] Explicitly cast values for ldc.i4 (#4301) Correct names of files under Xamarin.Forms.Controls.Issues.Shared (#4320) [XamlC] Resolve parameters in nested generics (#4061) [Xaml] Add provided value to collection (#4456) [XamlC] Resolve generic parameters of a method with generic return type (#4244) [XamlC] Always enable implicit casting, boxing and unboxing (#4238) |
Alan Grgic |
[iOS] Add JavaScript dialog delegate to WkWebView (#4254) don’t update source property of iOS webview on load if reading local html content (#4468) |
Alexandre Caprais |
Set ImageButton property of Android.ImageButtonRenderer public (#4534) |
Andoni Morales Alastruey |
[GTK] Fix several memory leaks in the GTK backend (#4112) [GTK] Fix synchronization context fairness (#4237) [Xaml] Support correctly custom resource providers (#4236) |
Andrei Misiukevich |
Fix typeface reset issue (#4019) [iOS] Label TextColor has no effect with FormattedString (#4043) housekeeping ended with https://github.com/xamarin//pull/3999 (#4105) https://github.com/xamarin//issues/4076 fix (#4161) [iOS] Rapidly clicking span (6 times at least) on UITest 3525 throws a null exception (#4109) Fix https://github.com/xamarin//issues/3301 (#4164) https://github.com/xamarin//issues/2831 fixes #2831 (#4111) [Enhancement] Possibility to change IsPassword for MacOS (#4175) fixes #2223 [MacOs] Image from file not getting searched in the bundle fixes #2322 (#4247) [iOS] Change CALayer.Transform in MainThread (#4160) Removed custom entitlements entry for iOS simulator builds (#4257) xamarin/Xamarin.Forms/issues/2315 (#4190) fixes #2315 [macOS] ContextActions on ListView not working (TextCell for example) (#4243) [iOS] ControlsGallery, shake gesture to navigate to the root page (#4263) [MacOs] Implemented InsertPageBefore (#4242) |
Andrei Nitescu |
Bindable layouts (#4052) [iOS] fix for SearchBar background color (#4229) Fix initial load of pins (#4304) |
Axel Gorris |
[GTK] Do not show a label in gtk slider renderer (#4098) |
Daniel Chalmers |
Update README.md (#4290) |
Edward Brey |
Make ToolbarItem constructor match properties (#4333) |
Edwin Wachs |
Implementation of method ForceUpdateSize for Cell on macOS (#4104) |
Gerald Versluis |
[Core, iOS, MacOS, Android, UWP, WPF] ListView hide scroll view scroll bars (#3897) fixes #3843 [iOS] Fix for issue 4295 text decorations gone wild after text update (#4322) [Core] Unseal Span (#4331) fixes #4083 [UWP] Changing IsPassword property changed InputScope (#4181) [UWP] Label MaxLines doesn’t work (#4528) [Core, iOS, Android, UWP, WPF, GTK, Tizen] Implement TextColor on TableSection (#4379) fixes #2910 Implemented colored refresh indicator for ListView pull-to-refresh (#2961) Disable suggestions for all Pickers (#4824) fixes #4629 |
Ione Souza Junior |
Added UI test to B45027 (#4079) Added UI test to B44338 (#4307) fixes #2379 Changed the namespace for all the Issues in the control gallery to Xamarin.Forms.Controls.Issues (#4234) Added UI test to B44044 (#4486) fixes #2377 |
Kevin Behrens |
Move github files to .github dir (#4288) |
Martin Zikmund |
Removing LineBreakMode support from WindowsResourcesProvider (#4024) UWP Toolbar dynamic overflow (#4022) |
masonyc |
[iOS] Label HorizontalTextAlignment=“Center” not working in conjunction with LineHeight on iOS (#4275) |
mikescandy |
Add UI Test. Add instructions. Move to correct namespace (#4170) fixes #2251 Adding instructions and UI tests for Bugzilla44461 (#4144) |
Nathaniel Nunes |
Switchcell oncolor (#4036) fixes #4027 |
Noam Yogev |
Add Editor.IsTextPredictionEnabled property (#4023) |
Paul Datsiuk |
[Android] total fix of issue #3575 (#4567) |
Peter Moore |
GH2691: Make XmlnsDefinitionAttribute public (#2782) |
Rasto |
ListView should convert item to string when ItemTemplate is not specified (#4016) |
Seungkeun Lee |
[Tizen] Fix Window alpha update timing (#4119) Fix PropagateEvent value properly on Cells (#4191) Add ImageButton Renderer on Tizen (#4436) |
shmin |
[Tizen] Fix ToolbarItem (#4416) |
Stefan Gerasch |
Navigation Page double Popped event Workaround (#3851) fixes #3509 |
Tomasz Cielecki |
Use ViewCompat to set and get label for view (#3996) |
Víctor Guzmán |
Fix edge case in unsubscribing weak events (#4538) |
Víctor Martos |
[GTK] Add support for ClickGestureRecognizer (#3971) |
Viridovics |
Add uitest for 2794 (#4110) fixes #2293 |
As with every release, the Samsung team continues to add Tizen support across the board for new capabilities. Thank you! You are relentless.
5. Quality and Polish
We are thrilled to resume our frequent cadence of shipping not only useful features and enhancements as noted above, but also continuing the flow of fundamental improvements to the core reliability and performance of the toolkit. As we have seeing from the Xamarin.Android team, build times are being reduced, deployment is being sped up, and many mysterious build change problems have been demystified and corrected. The IDE teams are bringing us improvements to the XAML Previewer, an all-new Property Panel, and AI-assisted IntelliSense with IntelliCode.
Some recent progress:
- Android’s D8 dexer and R8 shrinker
- What’s New for Xamarin Developers in Visual Studio 2019 Preview 2
See Xamarin.Forms 3.5 in Action!
Update and Enjoy Today
As always, you can find all the details about the latest release by reviewing the 3.5.0 release notes. Update Xamarin.Forms to 3.5.0 using your favorite NuGet package manager and do a full rebuild. Please let us know if you encounter issues of any kind, or if you have any idea that will improve your daily use of Xamarin. Just head over to GitHub and file a new issue.
To play around with the features of this and each new release, grab a clone of TheLittleThingsPlayground on GitHub.
BONUS: Keep in mind that 3.5.0 also contains previews of other new features that the Xamarin team is currently developing,. We look forward to receiving your feedback on Shell, Visual, CollectionView, and CarouselView. As you explore these features, please take a moment to share with us your thoughts here.
0 comments