appcompatアクティビティにスナックバーがあります。スナックバーを閉じるボタンOKがあります。しかし、スワイプ(左から右)でスナックバーを閉じることはできません。
以下は、スナックバーの私のコードです。
final Snackbar snackbar = Snackbar
.make(view, "Error Message", Snackbar.LENGTH_INDEFINITE);
snackbar.setAction("OK", new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
}
});
snackbar.show();
編集1
アクティビティのXMLレイアウトの親レイアウトとして相対レイアウトがあります。
Snackbarは、スワイプして閉じるなどのさまざまな操作を実行するために、ルートレイアウトまたはその上のどこかにCoordinatorLayoutを必要とします。レイアウト階層のどこかにそれを置く必要があります。
さらに、Snackbar.make()メソッドで渡すビューは、ビュー階層のどこかでCoordinatorLayoutを検索するために使用されます。このメソッドは、このビューからルートビューに移動して、スナックバーを表示し、アニメーションと操作を実行できるCoordinatorLayoutを見つけます。
ルートレイアウトをCoordinatorLayoutに置き換えると、問題が解決します。
CoordinatorLayoutを提供しなくても、スワイプして動作を閉じることをサポートするライブラリを作成しました。ユーザーは左または右の両方をスワイプして閉じることができます(最初は右にスワイプすることしかできません)。また、progressBarやその他のものも含まれています。試してみてください https://github.com/tingyik90/snackprogressbar 。
あなたがする必要があるのは、SnackProgressBarを作成し、スワイプで閉じることを許可することです。サンプルコード:
SnackProgressBar messageType = new SnackProgressBar( SnackProgressBar.TYPE_MESSAGE, "Your message") .setSwipeToDismiss(true)
Ashwani Kumar sの答えへの参照として。私は親密な LinearLayoutでこれを実装する方法があるかどうか尋ねられました。 match_parent
およびAndroid:layout_height
属性にAndroid:layout_width
を指定したCoordinatorLayoutを使用して元のLinearLayoutを簡単にラップします。
これにより、元の配置が維持され、スナックバーがスワイプ可能であることを確認できます。
スナックバーは次のようになります。
フラグメントの場合-
Snackbar.make(getView(), "Error Message", Snackbar.LENGTH_INDEFINITE);
活動のために-
Snackbar.make(this.findViewById(Android.R.id.content), "Error Message", Snackbar.LENGTH_INDEFINITE);
レイアウト全体をCoordinatorLayoutでラップし、これがルートレイアウトであると仮定します。