104

Android デザイン サポート ライブラリに Snackbar のサポートが含まれるようになりました。

次のコードを使用して作成しました。

Snackbar.make(findViewById(R.id.root_layout), result, Snackbar.LENGTH_LONG)
        .setAction("Dismiss", new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        }).show();

スナックバーはスワイプで閉じることができます。ただし、独自のアクション ボタン (setAction 関数を使用して作成) を使用して閉じたいとも考えています。

ただし、それを行うことができる機能はないようです。

4

7 に答える 7

158

ジャバの場合、

.makeメソッドはオブジェクトを返しますSnackbar。そのオブジェクトのインスタンスを作成して保存しますfinal。次に、 で次のonClick()ように呼び出します.dismiss

final Snackbar snackBar = Snackbar.make(findViewById(android.R.id.content), "Snackbar Message", Snackbar.LENGTH_LONG);

        snackBar.setAction("Action Message", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Call your action method here
                snackBar.dismiss();
            }
        });
        snackBar.show();

コトリンの場合、

        Snackbar.make(
            findViewById(android.R.id.content),
            "Snackbar Message",
            Snackbar.LENGTH_INDEFINITE
        ).setAction("Action Message") {
            // Call action functions here
        }.show()
于 2015-06-09T10:25:04.543 に答える
55

クリック アクションを実装し、空にします。空のクリック アクションをクリックすると、 スナックバー が閉じます。

Snackbar.make(coordinatorLayoutView, "Service Enabled", Snackbar.LENGTH_LONG)
                        .setAction("DISMISS", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                            }
                        })
                        .show();
于 2015-09-20T11:25:07.003 に答える
11

使用Snackbar.LENGTH_LONGすると、却下のアクション ボタンは必要なく、2 秒後に自動的に却下されます。このコードを使用する必要があります:

 Snackbar snackbar = Snackbar.make(relativeLayout, "Your Message", Snackbar.LENGTH_INDEFINITE);
            snackbar.setAction("dismiss", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    snackbar.dismiss();
                }
            });

            snackbar.show();

この行に注意してください

Snackbar.LENGTH_INDEFINITE
于 2016-08-09T23:41:38.727 に答える
3

Snackbar ( 'com.android.support:design:23.2.1'から) は、多くのタイプの却下アクションをサポートしています。次の例のように、eventを使用して簡単なフィルターを作成できます。

Snackbar.make(view, wornMessage, Snackbar.LENGTH_LONG).setActionTextColor(context.getResources().getColor(R.color.primary))
    .setCallback(new Snackbar.Callback() {
        @Override
        public void onShown(Snackbar snackbar) {
            super.onShown(snackbar);
        // when snackbar is showing
        }

        @Override
        public void onDismissed(Snackbar snackbar, int event) {
            super.onDismissed(snackbar, event);
            if (event != DISMISS_EVENT_ACTION) {
               //will be true if user not click on Action button (for example: manual dismiss, dismiss by swipe
            }
        }
    })
    .setAction("Undo, view1 -> {
        // if user click on Action button
}).show();

スナックバーの却下タイプ:

/** Indicates that the Snackbar was dismissed via a swipe.*/
public static final int DISMISS_EVENT_SWIPE = 0;
/** Indicates that the Snackbar was dismissed via an action click.*/
public static final int DISMISS_EVENT_ACTION = 1;
/** Indicates that the Snackbar was dismissed via a timeout.*/
public static final int DISMISS_EVENT_TIMEOUT = 2;
/** Indicates that the Snackbar was dismissed via a call to {@link #dismiss()}.*/
public static final int DISMISS_EVENT_MANUAL = 3;
/** Indicates that the Snackbar was dismissed from a new Snackbar being shown.*/
public static final int DISMISS_EVENT_CONSECUTIVE = 4;

PSサンプルコードでは、ラムダ式を使用しました(RetroLambdaによる)

于 2016-04-09T20:24:02.137 に答える
2

私も同じ問題を抱えていました。.dismiss() を使用すると、アニメーションが異なって見え、2 つの問題がありました。

  1. FABは再び下がらない
  2. SnackBar 自体は、Click のように下にスライドしません。

Snackbar の元の Android ソース コードを調べると、次の解決策が見つかりました。

View snackbarView = snackbar.getView();
Button snackbarActionButton = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);
//snackbarActionButton.setSoundEffectsEnabled(false); // might be considered in order not to have a confusing sound because nothing was clicked by the user

次に、snackBarActionButton で .performClick を呼び出します。

snackBarActionButton.performClick();

Snackbar の Android ソース コードへのリンク: https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/design/src/android/support/design/widget/Snackbar.java

于 2016-03-06T18:55:06.460 に答える