web-dev-qa-db-de.com

Wie kann ich die Form des Floating Action Button (FAB) auf Android ändern?

In unserer Android-App müssen wir eine schwebende Aktionsschaltfläche erstellen, die nicht der Standardkreis ist, sondern ein Quadrat mit drei abgerundeten Ecken. Die Fabrik sieht wie im Bild unten aus: 

 enter image description here

Ich habe es geschafft, ein solches Formular zu erstellen, weiß aber nicht, wie ich es in meiner Fabrik anwenden soll oder ob es überhaupt möglich ist. Die XML-Datei für die Form sieht folgendermaßen aus:

   <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
      Android:shape="rectangle">
    <solid Android:color="@color/red" />
    <corners
      Android:topLeftRadius="90dp"
      Android:topRightRadius="90dp"
      Android:bottomRightRadius="90dp"/>
   </shape>

Ich habe versucht, die Form mit zu ändern 

Android:src="@drawable/my_shape"

dies ändert jedoch nur das Symbol in meiner Schaltfläche. Ich denke ich muss FloatingActionButton erweitern, aber ich habe keine Ahnung wie.

Gibt es eine Möglichkeit, die Form der Fabrik zu ändern? Wenn jemand dies bereits erreicht hat, würde ich mich über eine Probe freuen.

18
AthaMit

Der von den Unterstützungsbibliotheken bereitgestellte FloatingActionButton kann nicht erweitert werden, da die Methoden, die ersetzt werden müssten, auf privat gesetzt sind. Material Components (der offizielle AndroidX-Ersatz für die Unterstützungsbibliothek) hat Shape Theming auf der roadmap für ~ Oktober-Dezember, wodurch Sie dies offiziell und problemlos tun können (ohne den Blick erweitern müssen).

Es ist jedoch noch nicht verfügbar. In der Zwischenzeit habe ich customFloatingActionButton von robertlevonyan gegabelt. Mit ein paar geringfügigen Änderungen können Sie Ihre eigene Form verwenden. Der Quellcode ist hier verfügbar.

Um es mit Gradle zu Ihrem Projekt hinzuzufügen, müssen Sie jitpack verwenden. Sie können es so hinzufügen:

allprojects {
   repositories {
       ...
       maven { url 'https://jitpack.io' }
   }
}

Dann implementiere meine Gabel:

implementation 'com.github.JediBurrell:customFloatingActionButton:-SNAPSHOT'

Als Nächstes erstellen wir die Form. Die von Ihnen erstellte sollte funktionieren.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle">
    <corners
        Android:topLeftRadius="@dimen/fab_circle_radius"
        Android:topRightRadius="@dimen/fab_circle_radius"
        Android:bottomRightRadius="@dimen/fab_circle_radius" />
    <solid Android:color="@color/colorAccent" />
</shape>

Fügen Sie es schließlich Ihrem Layout hinzu (weitere FAB-Optionen sind im Github-Repo aufgeführt):

<com.jediburrell.customfab.FloatingActionButton
    Android:id="@+id/floating_action_button"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_gravity="bottom|right"
    Android:layout_margin="16dp"
    app:fabType="custom"
    app:fabShape="@drawable/fab_teardrop"
    app:fabIcon="@drawable/ic_add_24dp"
    app:fabColor="@color/red" />

Und so sieht das aus:

13
JediBurrell

In Ihrer Frage haben Sie gesagt, dass Sie versucht haben, Android:src anzupassen, was offensichtlich der falsche Ansatz ist, da es sich hier um den Inhalt von FloatingActionButton handelt.

Der Android:background-Parameter ändert Ihre Form. Beachten Sie, dass es soll rund sein .

Ich denke, diese Frage ist nur kein Duplikat , weil diese andere Frage nur nach der Farbe fragt.

Sie müssen dies in Ihrer XML-Datei verwenden:

Android:background="@drawable/my_shape"

Sie suchen nach dem Hintergrund Ihrer Schaltfläche

Android:background="@drawable/my_shape"
0
Saurabh Lalwani