Ich versuche, neue Funktionen Snackbar
aus der Android Design Support Library zu nutzen, um mehrzeilige Snackbars anzuzeigen, wie in http://www.google.com/design/spec/components/snackbars-toasts.html#snackbars-toasts-specs gezeigt :
import android.support.design.widget.Snackbar;
final String snack = "First line\nSecond line\nThird line";
Snackbar.make(mView, snack, Snackbar.LENGTH_LONG).show();
Es wird nur First line...
auf meinem Nexus 7 angezeigt. Wie werden alle Zeilen angezeigt?
PS: Ich habe es versucht Toast
und es wurden alle Zeilen angezeigt.
Antworten:
maxLines
Legen Sie einfach das Attribut von Snackbars Textview festWenn Sie die neuere
"com.google.android.material:material:1.0.0"
Abhängigkeit verwenden, verwenden Siecom.google.android.material.R.id.snackbar_text
Folgendes : um auf die Textansicht der Snackbar zuzugreifen.Sie können auch verwenden
R.id.snackbar_text
. Es ist Arbeit für mich.quelle
Der dafür verwendete vordefinierte Wert kann in der Datei values.xml der App überschrieben werden
Dieser Wert wird standardmäßig von Snackbar verwendet.
quelle
quelle
Hier ist meine Erkenntnis dazu:
Android unterstützt zwar mehrzeilige Snackbars, es gibt jedoch eine maximale Anzahl von 2 Zeilen, die der Designrichtlinie entspricht, in der angegeben ist, dass die Höhe der mehrzeiligen Snackbar 80 dp (fast 2 Zeilen) betragen sollte.
Um dies zu überprüfen, habe ich das Beispielprojekt cheesesquare android verwendet. Wenn ich folgende Zeichenfolge verwende:
In diesem Fall kann ich die mehrzeilige Snackbar mit dem Text der 2. Zeile sehen, dh "Wenn eine zweite Snackbar ausgelöst wird", aber wenn ich diesen Code in die folgende Implementierung ändere:
Ich kann nur den "Zufälligen Text \ nWenn ... " sehen. Dies bedeutet, dass die Designbibliothek absichtlich die Textansicht auf maximal 2 Zeilen zwingt.
quelle
Für Material Design ist die Referenz
com.google.android.material.R.id.snackbar_text
quelle
Eine Alternative zu den Vorschlägen, bei denen die Ressourcen-ID für die in der Snackbar enthaltene Textansicht fest codiert wird, besteht darin, die Textansicht zu iterieren. Es ist langfristig sicherer und ermöglicht es Ihnen, die Support-Bibliothek mit minimaler Angst vor einer Änderung der ID zu aktualisieren.
Beispiel:
quelle
findViewsWithText
, da Sie den Text bereits kennen. Diese Lösung kann in einigen Situationen nicht funktionieren (z. B. wenn unsere Textansicht ein Kind eines Kindes des Snackbar-Layouts wird).snackbarLayout.getChildAt()
werde ich niemals zurückkehrenTextView
.Anstatt setMaxLines zu verwenden, verwende ich setSingleLine, um die Textansicht in ihren Inhalt zu umbrechen.
quelle
das funktioniert bei mir
quelle
Spät, könnte aber für jemanden hilfreich sein:
quelle
Mit der Materialkomponentenbibliothek können Sie sie mithilfe des
snackbarTextViewStyle
Attributs im App-Design definieren:Hinweis : Es ist die Version 1.2.0 der Bibliothek erforderlich .
quelle
In Kotlin können Sie einfach tun
Sie können auch ersetzen
setSingleLine(false)
mitmaxLines = 3
.Android Studio sollte Sie zum Hinzufügen auffordern
BEARBEITEN
Ich habe es nicht geschafft, dies wieder zum Laufen zu bringen, also werde ich nur mitteilen, was meiner Meinung nach die sauberste Art ist, in Kotlin zu schreiben, was einige andere bereits geteilt haben:
quelle
snackbar_text
.java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setSingleLine(boolean)' on a null object reference
implementation 'com.google.android.material:material:1.1.0'
und ist deine Snackbarcom.google.android.material.snackbar.Snackbar
diejenige? Wenn nicht, versuchen Sie esandroid.support.design.R.id.snackbar_text
als Ressourcen-ID.Eine Möglichkeit, die nicht abstürzt, falls sich in neueren Versionen der Bibliothek etwas ändert:
Und eine Möglichkeit, dies zu tun, ohne dass IDs verwendet werden, indem alle Textansichten in der Snackbar auf unbegrenzte Mehrzeiligkeit eingestellt werden:
Die gleiche Funktion in Java:
quelle
In Kotlin können Sie Erweiterungen verwenden.
Verwendung:
quelle
Nur ein kurzer Kommentar, wenn Sie
com.google.android.material:material
das Präfix oder Paket für verwendenR.id
solltencom.google.android.material
quelle
com.google.android.material:material:1.1.0
Da ich die neueste Materialdesign-Bibliothek von Google verwende und das folgende einfache Code-Snipet unten verwendet habe, um mehr Zeilen in der Snackbar zuzulassen. Ich hoffe, es wird auch neuen Entwicklern helfen.quelle
Es
updateMaxLine
ist weniger wahrscheinlich, dass diese Lösung nicht funktioniert , wenn Google beschließt, die ID einer Textansicht zu ändern.Beachten Sie nur, dass diese Option die maximale Zeile für alle Textansichten in der Snakbar-Ansicht aktualisiert (was meiner Meinung nach nicht wichtig ist).
Fügen Sie dies als Erweiterung hinzu
quelle