Aus Dokumentation: Parameterdauer - entweder eine der vordefinierten Längen: LENGTH_SHORT, LENGTH_LONG, oder eine benutzerdefinierte Dauer in Millisekunden. Ich kann jedoch keine benutzerdefinierte Dauer festlegen.
Beispielsweise
Snackbar
.make(parentLayout, "Feed cat?", 8000) // try here
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.setDuration(8000) // try here
.show();
aber statt 8 Sekunden ging die Snackbar schnell.
Anhand der Implementierung von Snackbar
und SnackbarManager
kann ich die Einschätzung von Eugene H bestätigen: Es ist ein Fehler. Von SnackbarManager
:
private void scheduleTimeoutLocked(SnackbarRecord r) {
mHandler.removeCallbacksAndMessages(r);
mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_TIMEOUT, r),
r.duration == Snackbar.LENGTH_LONG
? LONG_DURATION_MS
: SHORT_DURATION_MS);
}
Also, jeder Wert, der nicht LENGTH_LONG
ergibt eine kurzzeitige Snackbar.
Ich habe eine Ausgabe darüber eingereicht.
Bearbeiten : Wurde in Revision 22.2.1 behoben. Überprüfen Sie die Release Notes hier
Die Android docs haben [~ # ~] noch nicht [~ # ~] aktualisiert, aber wenn Sie springen Im Quellcode werden Sie feststellen, dass der Parameter für die Methode setDuration (int duration) entweder LENGTH_SHORT, LENGTH_LONG, LENGTH_INDEFINITE oder eine benutzerdefinierte sein kann Dauer in Millisekunden
Setzen Sie die anfängliche Dauer auf LENGTH_INDEFINITE und legen Sie anschließend Ihre benutzerdefinierte Dauer fest:
Snackbar
.make(parentLayout, "Feed cat?", Snackbar.LENGTH_INDEFINITE)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.setDuration(8000)
.show();
EDIT
Das Festlegen einer Periode direkt in Millisekunden funktioniert jetzt.
Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.show();
Seit 'com.Android.support:design:22.2.1'
sie können die Dauer Ihrer Snackbar auf LENGTH_INDEFINITE
einstellen. Dadurch wird die Snackbar so lange angezeigt, bis sie geschlossen wird oder eine andere Snackbar angezeigt wird.
Es scheint behoben zu sein
compile 'com.Android.support:design:22.2.1'
Nur Lint zeigt es rot unterstrichen, aber es funktioniert.
Ich habe eine Abhilfe geschaffen, ich habe eine Klasse erstellt, die mit handler und postDelayed Snackbars mit einer benutzerdefinierten Dauer setzt:
public class SnackBarMaker {
public static void snack(View content, String message, String actionText, int actionTextColor, View.OnClickListener onClick){
Snackbar.make(content, message, Snackbar.LENGTH_LONG)
.setAction(actionText, onClick)
.setActionTextColor(actionTextColor)
.show();
}
public static void snackWithCustomTiming(View content, String message, int duration){
final Snackbar snackbar = Snackbar.make(content, message, Snackbar.LENGTH_INDEFINITE);
snackbar.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
snackbar.dismiss();
}
},duration);
}
}
so verwenden:
//your duration
int duration = 4000
SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(Android.R.id.content)
, getString(R.string.your_message), duration);
Dieser Code funktioniert perfekt für mich versuchen Sie dies
Snackbar.make(view, "Hello SnackBar", Snackbar.LENGTH_LONG)
.setAction("Its Roy", new View.OnClickListener() {
@Override
public void onClick(View v) {
}
})
.setDuration(10000)
.setActionTextColor(getResources().getColor(R.color.colorAccent))
.show();
Hallo, gib dieser externen Bibliothek einen Versuch https://github.com/nispok/snackbar . Es ist veraltet, aber es wird Ihr Problem leicht lösen. Darüber hinaus ist es einfach zu implementieren. Vor der Support-Bibliothek habe ich diese Bibliothek nur für Snackbars verwendet. Aufgrund des Problems mit der Laufzeit der Support-Bibliothek kann ich diese Bibliothek nur verwenden.