web-dev-qa-db-ja.com

SnackBarでsetDuration()メソッドを使用する方法(Android Design Support Library)

ドキュメントから:パラメータ期間-定義済みの長さのいずれか:LENGTH_SHORT、LENGTH_LONG、またはミリ秒単位のカスタム期間。ただし、カスタム期間を設定することはできません。

例えば

Snackbar
    .make(parentLayout, "Feed cat?", 8000) // try here
    .setAction("Yes", snackOnClickListener)
    .setActionTextColor(Color.Magenta)
    .setDuration(8000) // try here
    .show();

しかし、8秒の代わりにSnackbarはすぐに消えてしまいました。

48
tehnolog

SnackbarSnackbarManagerの実装に基づいて、Eugene Hの評価を確認できます。これはバグです。 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);
}

そのため、LENGTH_LONG以外の値は、短期間のスナックバーになります。

私は 問題 を提出しました。

Edit:リビジョン22.2.1で修正されました。リリースノートを確認してください こちら

Android docs have[〜#〜] not [〜#〜]はまだ更新されていませんが、ジャンプした場合ソースコードを見ると、メソッドsetDuration(int duration)のパラメーターは、LENGTH_SHORT、LENGTH_LONG、LENGTH_INDEFINITEまたはカスタムのいずれかであることがわかります。ミリ秒単位の期間

60
CommonsWare

初期期間をLENGTH_INDEFINITEに設定し、その後カスタム期間を設定します。

Snackbar
.make(parentLayout, "Feed cat?", Snackbar.LENGTH_INDEFINITE)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.setDuration(8000)
.show();

[〜#〜] edit [〜#〜]

ミリ秒単位で期間を直接設定できるようになりました。

Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.show();
15
Jimmy Kamau

'com.Android.support:design:22.2.1'以降

スナックバーの期間をLENGTH_INDEFINITEに設定すると、スナックバーが表示されなくなるか、別のスナックバーが表示されます。

9

で固定されているようです

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

Lintにのみ赤い下線が表示されますが、機能します。

6
Jackson

このための回避策を作成しました。ハンドラーとpostDelayedを使用して、スナックバーにカスタム期間を設定するクラスを作成しました。

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);
}
}

このように使用するには:

  //your duration
   int duration = 4000 
SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(Android.R.id.content)
                                               , getString(R.string.your_message), duration);
5
Ziv Kesten

私にとって完璧に機能するこのコードはこれを試してください

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

こんにちは、この外部ライブラリを試してみてください https://github.com/nispok/snackbar 。非推奨ですが、問題を簡単に解決できます。さらに、実装は簡単です。サポートライブラリの前は、このライブラリをスナックバーにのみ使用していました。サポートライブラリの期間の問題のため、このライブラリのみを使用して満足しています。

1
Akshat