13

我正在开发一个安卓应用程序。在那我想在对话框中显示材料设计 Snackbar。可能吗?如果是,那怎么办?

请帮我。

谢谢。

4

4 回答 4

19

绝对有可能,您只需要将 Dialog 的 View 传递给SnackBar.

例子

    AlertDialog.Builder mAlertDialogBuilder = new AlertDialog.Builder(this);
    LayoutInflater inflater = this.getLayoutInflater();
    // inflate the custom dialog view
    final View mDialogView = inflater.inflate(R.layout.dialog_layout, null);
    // set the View for the AlertDialog
    mAlertDialogBuilder.setView(mDialogView);

    Button btn = (Button) mDialogView.findViewById(R.id.dialog_btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Pass the mDialogView to the SnackBar
            Snackbar
                    .make(mDialogView, "SnackBar in Dialog", Snackbar.LENGTH_LONG)
                    .show();
        }
    });
    AlertDialog alertDialog = mAlertDialogBuilder.create();
    alertDialog.show();

结果

图片显示结果

注意:不需要使用 aCoordinatorLayout作为根。在我的示例中,我只是使用 LinearLayout 作为根。

于 2015-09-08T10:48:43.850 回答
5

是的你可以。

Snackbar在您的Dialog创建自定义中显示View它。您可以在此处阅读有关它的更多信息:对话框/创建自定义布局

然后显示Snackbar调用您的自定义视图Snackbar.make((dialogView, "text", duration))在哪里。dialogView

于 2015-09-08T10:35:41.723 回答
1

如果您使用的是Dialogthen:

dialog_share = new Dialog(MainScreen.this, R.style.DialogTheme);
dialog_share.requestWindowFeature(Window.FEATURE_NO_TITLE);
LayoutInflater inflater = this.getLayoutInflater();
mDialogView = inflater.inflate(R.layout.dialog_share, null);
dialog_share.setContentView(mDialogView);
dialog_share.getWindow().setBackgroundDrawableResource(R.color.translucent_black);
dialog_share.show();

public void ShowSnackBarNoInternetOverDialog() {
        Snackbar snackbar = Snackbar.make(mDialogView, getString(R.string.checkinternet), Snackbar.LENGTH_LONG);
        snackbar.setActionTextColor(Color.CYAN);
        snackbar.setAction("OK", new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(MainScreen.this, "snackbar OK clicked", Toast.LENGTH_LONG).show();
            }
        });
        snackbar.show();
    }
于 2015-12-22T19:22:01.030 回答
0

getDialog().getWindow().getDecorView()在 Snackbar.make() 中使用

Snackbar
      .make(getDialog().getWindow().getDecorView(), "SnackBar in Dialog", Snackbar.LENGTH_LONG)
      .show();
于 2021-01-07T18:38:41.743 回答