Can I display material design Snackbar in dialog?

后端 未结 4 1753
隐瞒了意图╮
隐瞒了意图╮ 2021-01-17 12:24

I am developing an android application. In that I want to display material design Snackbar in dialog. Is it possible? If yes then how?

Please help me.

Thanks

相关标签:
4条回答
  • 2021-01-17 12:33

    Yes, you can.

    To show Snackbar inside your Dialog create custom View for it. You can read more about it here: Dialogs/Creating a Custom Layout

    Then for showing Snackbar invoke Snackbar.make((dialogView, "text", duration)) where dialogView is your custom view.

    0 讨论(0)
  • 2021-01-17 12:44

    If you're using a Dialog then:

    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();
        }
    
    0 讨论(0)
  • 2021-01-17 12:49

    It's definitely possible, you just have to pass the View of the Dialog to the SnackBar.

    Example

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

    Result

    Note: There's no need to use a CoordinatorLayout as the root. In my example I simply used a LinearLayout as the root.

    0 讨论(0)
  • 2021-01-17 12:52

    Use getDialog().getWindow().getDecorView() inside Snackbar.make()

    Snackbar
          .make(getDialog().getWindow().getDecorView(), "SnackBar in Dialog", Snackbar.LENGTH_LONG)
          .show();
    
    0 讨论(0)
提交回复
热议问题