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
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.
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();
}
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.
Use getDialog().getWindow().getDecorView() inside Snackbar.make()
Snackbar
.make(getDialog().getWindow().getDecorView(), "SnackBar in Dialog", Snackbar.LENGTH_LONG)
.show();