In der Snackbar können Sie kein benutzerdefiniertes Layout festlegen. Wie von Primoz990 vorgeschlagen, können Sie jedoch die Snackbar-Ansicht abrufen. Die Funktion getView gibt das Snackbar.SnackbarLayout zurück, ein horizontales LinearLayout-Objekt, dessen untergeordnete Elemente eine TextView und eine Schaltfläche sind. Um Ihre eigene Ansicht zur Snackbar hinzuzufügen, müssen Sie nur die Textansicht ausblenden und Ihre Ansicht zur Snackbar hinzufügen. SnackbarLayout.
// Create the Snackbar
Snackbar snackbar = Snackbar.make(containerLayout, "", Snackbar.LENGTH_LONG);
// Get the Snackbar's layout view
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
// Hide the text
TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text);
textView.setVisibility(View.INVISIBLE);
// Inflate our custom view
View snackView = mInflater.inflate(R.layout.my_snackbar, null);
// Configure the view
ImageView imageView = (ImageView) snackView.findViewById(R.id.image);
imageView.setImageBitmap(image);
TextView textViewTop = (TextView) snackView.findViewById(R.id.text);
textViewTop.setText(text);
textViewTop.setTextColor(Color.WHITE);
//If the view is not covering the whole snackbar layout, add this line
layout.setPadding(0,0,0,0);
// Add the view to the Snackbar's layout
layout.addView(snackView, 0);
// Show the Snackbar
snackbar.show();
Ab Version 25.1.0 der Android Support Library ist dies möglich
I. Deklarieren Sie ein benutzerdefiniertes Layout in Ihrem Werte- / Layoutordner.
Hinweise:
@dimen/design_snackbar
Werte, um den Richtlinien für das Materialdesign zu entsprechen.?attr/colorAccent
Sie diese Option, um Änderungen am Anwendungsthema auf die Snackbar anzuwenden.II. Erweitern Sie die BaseTransientBottomBar- Klasse.
III. Fügen Sie BaseTransientBottomBar.ContentViewCallback hinzu
IV. Fügen Sie eine Methode zum Erstellen einer Snackbar mit benutzerdefiniertem Layout und Methoden zum Füllen hinzu.
V. Instanz erstellen
CustomSnackbar
undshow()
Methode aufrufen .Weitere Informationen zu Snackbar und seiner Anpassung finden Sie unter materialdoc.com
Vollständiger
CustomSnackbar.class
Code:quelle
Der XML-Weg:
Die ursprüngliche Layout-XML-Datei, die für das verwendet wird,
Snackbar
ist diese Datei:design_layout_snackbar_include.xml
::Um dieses Layout zu überschreiben , sollten Sie Ihr eigenes Layout mit den gleichen
android:id
s wie in diesem schreiben und in Ihrerrefs.xml
Datei diese Zeile hinzufügen:quelle
BaseTransientBottomBar
, per stackoverflow.com/a/41154330/9636Die Antwort lautet: Passen Sie die Snackbar nicht an. Es sollte nicht mehr Elemente als einen kurzen Text und eine Aktion enthalten. Siehe Google Material Design-Richtlinien .
UPDATE: Wenn Sie die Snackbar trotzdem anpassen möchten, habe ich Folgendes in meiner App implementiert:
Ich habe es noch nie versucht, aber mit dem Abrufen der Stammansicht der Snackbar können Sie der Snackbar programmgesteuert neue Ansichten hinzufügen.
quelle
In onCreate der Aktivität:
quelle
Ich habe es versucht und es funktioniert!
quelle
Versuchen Sie den folgenden Code.
Hinweis:
quelle
Kopieren Sie diese Methode aus der Klasse, um die Antwort von Yakiv Mospan zu ergänzen und Ihre benutzerdefinierte
BaseTransientBottomBar
Show von unten wie a zu gestaltenSnackbar
,Snackbar
um ein geeignetes übergeordnetes Element für denBaseTransientBottomBar
Konstruktor zu finden.quelle
Kotlin-Version für die akzeptierte Antwort: https://stackoverflow.com/a/33441214/2437655
quelle
Sie können diese Bibliothek ausprobieren. Dies ist ein Wrapper für Android Standard Snackbar. https://github.com/ChathuraHettiarachchi/CSnackBar
oder Sie können sogar Ihre eigene Ansicht verwenden,
Derzeit ist das einzige Problem mit dem benutzerdefinierten Layout, dass wir die Ansichtshöhe in dp als Eingabe übergeben müssen
quelle