web-dev-qa-db-de.com

Verwendung der setDuration () -Methode in SnackBar (Android Design Support Library)

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.

48
tehnolog

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

60
CommonsWare

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();
15
Jimmy Kamau

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.

9

Es scheint behoben zu sein

compile 'com.Android.support:design:22.2.1'

Nur Lint zeigt es rot unterstrichen, aber es funktioniert.

6
Jackson

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);
5
Ziv Kesten

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();
3
kundan roy

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.

1
Akshat