ドキュメントから:パラメータ期間-定義済みの長さのいずれか: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はすぐに消えてしまいました。
Snackbar
とSnackbarManager
の実装に基づいて、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またはカスタムのいずれかであることがわかります。ミリ秒単位の期間
初期期間を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();
'com.Android.support:design:22.2.1'
以降
スナックバーの期間をLENGTH_INDEFINITE
に設定すると、スナックバーが表示されなくなるか、別のスナックバーが表示されます。
で固定されているようです
compile 'com.Android.support:design:22.2.1'
Lintにのみ赤い下線が表示されますが、機能します。
このための回避策を作成しました。ハンドラーと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);
私にとって完璧に機能するこのコードはこれを試してください
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();
こんにちは、この外部ライブラリを試してみてください https://github.com/nispok/snackbar 。非推奨ですが、問題を簡単に解決できます。さらに、実装は簡単です。サポートライブラリの前は、このライブラリをスナックバーにのみ使用していました。サポートライブラリの期間の問題のため、このライブラリのみを使用して満足しています。