maui icon indicating copy to clipboard operation
maui copied to clipboard

πŸš€πŸš€πŸš€ Floating Action ButtonπŸš€πŸš€πŸš€

Open ziomek64 opened this issue 2 years ago β€’ 13 comments

Description

This was already requested in Xamarin Forms - https://github.com/xamarin/Xamarin.Forms/issues/12997

So I will copy what's there, the author is - techprotom, he described it perfectly

We really need it, it's a core of material design

Floating action button

The floating action button is one of the most crucial components used in Google's material design - especially for layouts in which it is needed to add one or more items to a list or compose a new email. In addition to this - it's striking design - which can come in two forms (mini or normal size) make for a better user experience than using standard buttons.

Imagine this GitHub Repo as a puzzle - this puzzle is missing crucial parts. One of these parts is the floating action - which I know and can guarantee will be a perfect feature/addition to your library.

Implementing a floating action button in Xamarin.Forms right now is a clunky job - and a third-party library which makes it easier to implement a floating action button plus one that utilises material design would make not only my life - but the life of many others - just that much better.

Please consider adding this to your library - it will certainly attract more users.

Email me at [email protected] if you need help or want to ask any questions. - Probably don't email him, as it was old issue

Images and links:

Floating action button: https://material.io/components/buttons-floating-action-button

Regular regular

Mini mini

On Hover on_hover

On Clicked on_clicked

Extended extended

Extended (no icon) extended_noicon

Use cases (there are many) case1 case2 case3 case4 case5 case6

Public API Changes

TBD

Intended Use-Case

For example mail app, would be great to have an action button at a glance at all times to compose a new email. When scrolling down it would disappear to not cover mails, when going up it would appear again.

For long lists, collections, a button like this could scroll the whole collection up so you're back at the top again or display a pop-up to choose a group to scroll to.

Possibilities are endless, those are two simple ones that i came up with and that I often see in apps. See the pictures as well!

ziomek64 avatar Jun 04 '23 07:06 ziomek64

We've added this issue to our backlog, and we will work to address it as time and resources allow. If you have any additional information or questions about this issue, please leave a comment. For additional info about issue management, please read our Triage Process.

ghost avatar Jun 05 '23 14:06 ghost

Any updates on this? Still waiting.

Manish-Pradhan-FP avatar Nov 23 '23 13:11 Manish-Pradhan-FP

Any updates on this? Still waiting.

Not up to me man, ms doesn't have resources on MAUI 😁

ziomek64 avatar Nov 23 '23 13:11 ziomek64

PLEASE, implement it is really useful!

leonedev avatar Feb 10 '24 11:02 leonedev

still waiting!

PrathyushTaneti avatar Feb 20 '24 04:02 PrathyushTaneti

Up

Baghddassaryan avatar Mar 27 '24 12:03 Baghddassaryan

Any progress on this?

Wout-M avatar Jun 10 '24 11:06 Wout-M

Any progress on this?

Of course not, nobody cares from Microsoft

ziomek64 avatar Jun 10 '24 13:06 ziomek64

Any progress on this?

Still no ofc........

leonedev avatar Jun 10 '24 17:06 leonedev

This is how I realized <FloatingActionButton> using only XAML markup.

Example based on <Grid> Control, that have such feature: if any contol inside Grid-layout placed in same position (row-column) like another - this second element stay up on that first like on the stack.

So, if that first element is <StackLayout> with <ScrollView>, and second element is usual <Button> we getting as a result <FloatingActionButton>-analogue with full functionality of that, that can "fly"on the stack while user is scrolling screen.

This is how it looks on device:

This is markup example.

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XXX.MainPage">
    <Grid>
        <ScrollView>
        <VerticalStackLayout Spacing="10">
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            
        </VerticalStackLayout>
        </ScrollView>
        <Button
            x:Name="FloatingActionButton"
            HorizontalOptions="End"
            VerticalOptions="End"
            Text="+"
            Clicked="OnFloatingActionButtonClicked"
            CornerRadius="50"
            Margin="0, 0, 10, 10"
            FontAttributes="Bold"/>
    </Grid>
</ContentPage>```

lavr2004 avatar Jul 12 '24 09:07 lavr2004

This is how I realized <FloatingActionButton> using only XAML markup.

Example based on <Grid> Control, that have such feature: if any contol inside Grid-layout placed in same position (row-column) like another - this second element stay up on that first like on the stack.

So, if that first element is <StackLayout> with <ScrollView>, and second element is usual <Button> we getting as a result <FloatingActionButton>-analogue with full functionality of that, that can "fly"on the stack while user is scrolling screen.

This is how it looks on device:

This is markup example.

<?xml version="1.0" encoding="utf-8"?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="XXX.MainPage">
    <Grid>
        <ScrollView>
        <VerticalStackLayout Spacing="10">
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            <Label Text="-------------------------------------------------"/>
            <Label Text="================================================="/>
            
        </VerticalStackLayout>
        </ScrollView>
        <Button
            x:Name="FloatingActionButton"
            HorizontalOptions="End"
            VerticalOptions="End"
            Text="+"
            Clicked="OnFloatingActionButtonClicked"
            CornerRadius="50"
            Margin="0, 0, 10, 10"
            FontAttributes="Bold"/>
    </Grid>
</ContentPage>```

Couldn't you just use absolute layout and place it where you want?

ziomek64 avatar Jul 14 '24 09:07 ziomek64

Yea I've used absolute layout myself with positionproportional

Wout-M avatar Jul 14 '24 09:07 Wout-M

Any progrress on the FAB ?

Isaac-Zimba-J avatar Oct 23 '24 19:10 Isaac-Zimba-J

Knowing this in not a control that we see on all platforms.. Maybe it could reside in some third-party lib? Community toolkit proposes already something: https://vladislavantonyuk.github.io/articles/Creating-dynamic-floating-action-button/

taublast avatar Feb 13 '25 15:02 taublast

When will MS add this default behavior to MAUI?

Markus-Zoennchen avatar Jun 20 '25 10:06 Markus-Zoennchen

What's going on?

  • It's currently one of the most valuable companies in the world.
  • Its market capitalization is around $3.82 trillion USD.
  • Its shares are priced at $513.58.
  • It operates one of the largest cloud infrastructure networks on the planet.
  • It employs around 228,000 people worldwide.
  • Xbox, GitHub, Office, LinkedIn.
  • Copilot everywhere, Azure OpenAI Service, Security with AI, Developer acceleration, Responsible AI leadership, Productivity and business AI apps.
  • AI, AI, AI, AI, AI, AI, AI...

But in more than two years + all the AI ​​models + all the computing and calculation power + a quantum computer + supercomputers + its entire team of programmers + The most advanced, effective and efficient languages ​​on the planet...

But still can't create a simple FLOATING ACTION BUTTON.

Even do the binding to the native library


And on top of that, they expect us to pay for a Copilot that's useless in MAUI.

alphanumericaracters avatar Oct 19 '25 22:10 alphanumericaracters

There are bindings, the material package, but that's for native project

What's going on?

  • It's currently one of the most valuable companies in the world.
  • Its market capitalization is around $3.82 trillion USD.
  • Its shares are priced at $513.58.
  • It operates one of the largest cloud infrastructure networks on the planet.
  • It employs around 228,000 people worldwide.
  • Xbox, GitHub, Office, LinkedIn.
  • Copilot everywhere, Azure OpenAI Service, Security with AI, Developer acceleration, Responsible AI leadership, Productivity and business AI apps.
  • AI, AI, AI, AI, AI, AI, AI...

But in more than two years + all the AI ​​models + all the computing and calculation power + a quantum computer + supercomputers + its entire team of programmers + The most advanced, effective and efficient languages ​​on the planet...

But still can't create a simple FLOATING ACTION BUTTON.

Even do the binding to the native library


And on top of that, they expect us to pay for a Copilot that's useless in MAUI.

ziomek64 avatar Oct 19 '25 22:10 ziomek64

What's going on?

  • It's currently one of the most valuable companies in the world.
  • Its market capitalization is around $3.82 trillion USD.
  • Its shares are priced at $513.58.
  • It operates one of the largest cloud infrastructure networks on the planet.
  • It employs around 228,000 people worldwide.
  • Xbox, GitHub, Office, LinkedIn.
  • Copilot everywhere, Azure OpenAI Service, Security with AI, Developer acceleration, Responsible AI leadership, Productivity and business AI apps.
  • AI, AI, AI, AI, AI, AI, AI...

But in more than two years + all the AI ​​models + all the computing and calculation power + a quantum computer + supercomputers + its entire team of programmers + The most advanced, effective and efficient languages ​​on the planet...

But still can't create a simple FLOATING ACTION BUTTON.

Even do the binding to the native library


And on top of that, they expect us to pay for a Copilot that's useless in MAUI.

That is why I moved to React Native forever. 0 support, they don't listen to the community, plus it is full of bugs and inconsistencies.

Ditch this framework and Microsoft whenever as fast as possible.

leonedev avatar Oct 20 '25 00:10 leonedev

MAUI is the biggest disappointment of all time! Many bugs, standard app controls like a QR scanner or FAB control are not implemented. They don't listen to the community. Microsoft, what the fuck?! Why you gave up Xamarin, MAUI is not better, it's rather worse than before.

tualatin avatar Oct 21 '25 10:10 tualatin

That is why I moved to React Native forever. 0 support, they don't listen to the community, plus it is full of bugs and inconsistencies.

Ditch this framework and Microsoft whenever as fast as possible.

The problem with MAUI is that it's a bit of everything and a lot of nothing, given that (in the case of Android) it does not consider the entire system API, so there are app and system states and lifecycle events that you will never be able to account for, not even in exceptions.

There's also a lot of blame on the developers, who dive into programming on a system and multiple devices without knowing them, thinking it's just like any other web implementation, and then they end up making huge runtime errors.

On top of that, you have to consider that C# isn't exactly the best language for programming on devices. It's got way too much ceremony and rigidity.

En mi caso uso F# Fabulous MAUI y Fabulous Avalonia.

alphanumericaracters avatar Nov 06 '25 05:11 alphanumericaracters

MAUI is the biggest disappointment of all time! Many bugs, standard app controls like a QR scanner or FAB control are not implemented. They don't listen to the community. Microsoft, what the fuck?! Why you gave up Xamarin, MAUI is not better, it's rather worse than before.

Yes, it's terrifying. At a low level, it leaves much to be desired, not to mention that the UI controls are ugly and you have to do too many tricks to make it look good. In my case, I achieved better security, performance, and responsiveness with F# Fabulous MAUI and Fabulous Avalonia.

alphanumericaracters avatar Nov 06 '25 05:11 alphanumericaracters

MAUI is the biggest disappointment of all time! Many bugs, standard app controls like a QR scanner or FAB control are not implemented. They don't listen to the community. Microsoft, what the fuck?! Why you gave up Xamarin, MAUI is not better, it's rather worse than before.

Yes, it's terrifying. At a low level, it leaves much to be desired, not to mention that the UI controls are ugly and you have to do too many tricks to make it look good. In my case, I achieved better security, performance, and responsiveness with F# Fabulous MAUI and Fabulous Avalonia.

I totally agree on what you are saying!

leonedev avatar Nov 06 '25 15:11 leonedev

That is why I moved to React Native forever. 0 support, they don't listen to the community, plus it is full of bugs and inconsistencies.

Ditch this framework and Microsoft whenever as fast as possible.

The problem with MAUI is that it's a bit of everything and a lot of nothing, given that (in the case of Android) it does not consider the entire system API, so there are app and system states and lifecycle events that you will never be able to account for, not even in exceptions.

There's also a lot of blame on the developers, who dive into programming on a system and multiple devices without knowing them, thinking it's just like any other web implementation, and then they end up making huge runtime errors.

On top of that, you have to consider that C# isn't exactly the best language for programming on devices. It's got way too much ceremony and rigidity.

En mi caso uso F# Fabulous MAUI y Fabulous Avalonia.

You pointed out a very specific thing that I always thought. I had to learn how to build UI for iOS and Android in native IDE (android studio and Xcode, just to be able to do some really simple and stupid things that the framework does not provide. It is really a shame that people need to have this huge background just to make things flawlessy work.

leonedev avatar Nov 06 '25 15:11 leonedev

You pointed out a very specific thing that I always thought. I had to learn how to build UI for iOS and Android in native IDE (android studio and Xcode, just to be able to do some really simple and stupid things that the framework does not provide. It is really a shame that people need to have this huge background just to make things flawlessy work.

In fact, the mobile world is a universe in itself, as it occupies an intermediate position [Embedded > Smartphone || Tablet < Laptop].

Although, Ex: the Android API level is just one, each brand 'adds' its own things on top of it (policies and restrictions), not to mention that each brand has a different range of devices (low, mid, high), and each device model has its own 'particularities' regarding hardware and software.

Then we can talk about the policies that each PlayStore has for its Apps, which fully cover how and what they can/should do, their behaviour, and the way they should be programmed.

  • The UI & UX must comply with certain rules.
  • The way you connect to remote services must be or have certain considerations in mind.
  • The use of resources largely determines how the system will treat your app.
  • According to the type of data, options, and functionality your app offers, this is how it should be presented for evaluation on the Play Store, along with its policies and legal framework.
  • Permissions, Notifications, Lifecycle's, Events & States {App/System/User}, each one are a whole separate ecosystem.

Your app needs to be responsive at all times, but you can't inject code from outside or be a PWA, and also you shouldn't overuse the webview. By webview, I mean a web page view, not an interactive web. (Interactions should be minimal and determined)

alphanumericaracters avatar Nov 09 '25 02:11 alphanumericaracters

In the current times we are living in (as far as software is concerned), it is impossible to have (by nature) a framework where:

  • write once and run everywhere, since desktop, laptop, mobile, and embedded are platforms that serve different functions.
  • The same goes for systems! Although one could say that there are only 3 (Apple, Windows, Linux), Linux in itself is a universe! Just because Android is Linux, it doesn't mean or even remotely imply that it is the same as Fedora, Debian, etc.

We can talk about the portability of languages, etc. But the way of interacting with a system... is completely different.

I believe that MAUI (C# or F#) would be more well-received if each system and platform were separate:

  • MAUI Android.
  • MAUI iOS.
  • MAUI MAC.
  • MAUI Windows.
  • MAUI Office.
  • MAUI IoT (Whatever that means for MS, given that Arduino is not the same as ESP32, and much less Raspberry Pi.)

IoT makes no sense in (so far) any other language than Assembler, C, C++, Since any other language incorporates garbage collection, which is harmful in applications, environments, tasks, and/or systems that require a 0-second response. (Unless we are talking about C# or F# for embedded systems, Like a different version of the language).

I say all of this based on decades of knowledge and experience in programming on these systems.

alphanumericaracters avatar Nov 09 '25 03:11 alphanumericaracters