5

Ich bin auf der Suche nach einer neuen App mit nur API 21.Wie fügt man einen Floating Action Button ohne AppCompat hinzu?

Um dem Material Design zu folgen, versuche ich ein FAB zu verwenden, aber ich kann keine anständigen Informationen finden, wie man das jetzt verwendet in der Designbibliothek enthalten.

Bisher habe ich die Bibliothek, die die build.gradle Datei hinzugefügt, und fügte ich ein FAB meiner Ansicht (Code unten)

<android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:src="@android:drawable/ic_menu_add" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentEnd="true" 
     app:elevation="5dp" 
     app:borderWidth="0dp" 
     app:fabSize="mini"/> 

(Dies ist in einem RelativeLayout)

Wenn starten Sie die App, die ich erhalten:

android.view.InflateException: Binary XML-Datei Zeile # 15: Fehler aufblähenden Klasse android.support.design.widget.FloatingActionButton

Ich fand eine Antwort auf SO, die besagt, dass ich ein AppCompat-Thema verwenden muss, aber ich würde lieber nur reines Material/API21-Zeug verwenden.

Wie kann ich einen FAB ohne AppCompat (Support-Bibliotheken) verwenden?

+0

Ich denke, dass Sie wirklich viele Timeavers und große APIs wie CoordinatorLayout, Snackbar, NavigationView, TabLayout ... und so weiter verpassen würden. Was so ziemlich alles "reine Material" ist. Wie dem auch sei, das Erstellen eines eigenen FloatingActionButtons auf API21 + ist ziemlich einfach. Sie können sich die Implementierung von googles in [android-topeka] ansehen (https://github.com/googlesamples/android-topeka/blob/master/app/src/main/java/com/google/samples/apps/topeka /widget/fab/FloatingActionButton.java). –

Antwort

6

Der FAB ist in die neue Design Compat-Bibliothek integriert, die bereits ab API 7 auf Geräten funktioniert. Sie müssen sie als Abhängigkeit verwenden, um sie verwenden zu können (und sollten nicht zögern, dies zu tun).

Wenn Sie die Verwendung einer Bibliothek (oder eines externen Codes) vermeiden möchten, müssen Sie den FAB selbst zeichnen (mit einem Shape Drawable).

Fazit, die Verwendung der Design Compat-Lib ist die bevorzugte Methode zur Unterstützung eines FAB, und Sie sollten es verwenden. Die Design Compat-Lib ist das "reine/Material API21 Zeug".

Es gibt KEINE FAB-Implementierung, die für eine andere API als die in der Design-Support-Bibliothek implementiert wurde. Sie müssen die Lib einschließen oder den Code vollständig selbst implementieren.

Die Design-Bibliothek ist von AppCompat abhängig. Wenn Sie also die native Fab verwenden möchten, müssen Sie auch die Abhängigkeit für AppCompat einbeziehen.

Vom official blog post: „Beachten Sie, dass das Design Bibliothek hängt von der Unterstützung v4 und AppCompat Support-Bibliotheken, werden diese automatisch aufgenommen werden, wenn Sie die Design-Bibliothek Abhängigkeit hinzufügen

+0

Ich denke, es gibt einige gekreuzte Drähte. Ich weiß, dass ich die Design Support Library verwenden muss, ich bin nicht dabei. Ich sage, dass es so aussieht, als müsste ich das v7 AppCompat-Zeug verwenden, was ich nicht möchte. –

+0

Zusammengeführt in Antwort - unterste Zeile gibt es eine Abhängigkeit von AppCompat, also müssen Sie es verwenden. – Booger

-1

Es ist auch sehr beliebt mehr Bibliotheken auf GitHub wie:

FloatingActionButton die als Menü erweitern/reduzieren kann, um mehrere Aktionen aufzudecken.

+1

Ich persönlich würde momentan keine Libelle von Drittanbietern verwenden - und bei der "nativen" Implementierung bleiben, die in der Design Lib enthalten ist. Es ist wichtig, sich an Standards zu halten (und der Standard "Design Lib implementiert" FAB wird Ihnen am nächsten kommen). Ich weiß, dass es möglicherweise nicht so viele Funktionen (einschließlich Erweiterbarkeit) hat, denke aber immer noch, dass es wichtig ist, neue Standards zu entwickeln und umzusetzen. – Booger

-1

Ich würde sagen, dass, obwohl Sie beabsichtigen, Ihre App nur auf API21 verfügbar zu machen, aber ich ermutige Sie, Ihre Anwendung mit Android Support Library AppCompat-v7 trotzdem zu implementieren. Es gibt viele Vorteile, die Sie bekommen werden.

Wie auch immer, es ist Ihre Wahl. Nur mein Vorschlag. Aber wenn du überzeugt bist. Oder sehen Sie sich dieses vollständige Tutorial zur Verwendung der Android Design Support Library an.http://inthecheesefactory.com/blog/android-design-support-library-codelab/en

Hope this Hilfe

+0

Welche Vorteile bietet die Verwendung der v7-Bibliothek?Außerdem scheint es, dass ich das native FAB nur mit der Design-Support-Bibliothek verwenden kann, die das AppCompat-Design verwendet:/ –

1

Das Material Design-Bibliothek hat eine Abhängigkeit mit AppCompat. Überprüfen Sie die Antwort von @Booger. Es berichtet das offizielle Blog.

Verwendung eines FAB.

die Abhängigkeit zu Ihrem build.gradle hinzufügen:

<android.support.design.widget.FloatingActionButton 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|right" 
      android:src="@drawable/ic_add" 
      android:layout_marginBottom="@dimen/fab_margin_bottom" 
      android:layout_marginRight="@dimen/fab_margin_right" 
      app:elevation="6dp" 
      app:borderWidth="0dp" 
      app:fabSize="normal" /> 

Momentan gibt es einige Fehler:

compile 'com.android.support:design:22.2.0' 

einfach die FAB zu Ihrem Design hinzuzufügen.

Sie müssen app:borderWidth="0dp" definieren, um den Schatten mit API21 + anzuzeigen.

Sie müssen auch unterschiedliche Ränder für API 21+ und ältere Geräte definieren.

res/Werte/dimens.xml

<dimen name="fab_margin_right">0dp</dimen> 
<dimen name="fab_margin_bottom">0dp</dimen> 

res/Werte-v21/dimens.xml

<dimen name="fab_margin_right">16dp</dimen> 
<dimen name="fab_margin_bottom">16dp</dimen> 

FAB verwendet die Akzentfarbe und man konnte mit app:backgroundTint Attribut außer Kraft setzen .

Schließlich können Sie eine clicklistener mit Set:

fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     //do something 
    } 
}); 
-1

Eigentlich war ich mit dem gleichen Problem. Die Lösung war ziemlich einfach: Sie müssen app:rippleColor="@color/colorPrimary" definieren und Sie können einen FAB verwenden, ohne Appcompat Designs und Aktivitäten zu verwenden. Natürlich müssen Sie compile 'com.android.support:support-v4:25.3.1' und compile 'com.android.support:design:25.3.1' einschließen, aber Sie müssen nicht AppCompatActivity und diese Themen verwenden.

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/action_add_palette" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|end" 
    android:layout_margin="16dp" 
    android:src="@android:drawable/ic_input_add" 
    app:rippleColor="@color/colorPrimary" /> 
+0

Dies funktioniert nicht –

Verwandte Themen