我可以在对话框中显示 material design Snackbar 吗?
Can I display material design Snackbar in dialog?
我正在开发 android 应用程序。因为我想在对话框中显示 material design Snackbar。可能吗?如果是那么怎么办?
请帮助我。
谢谢。
是的,你可以。
要在 Dialog
中显示 Snackbar
,请为其创建自定义 View
。您可以在这里阅读更多相关信息:Dialogs/Creating a Custom Layout
然后为了显示 Snackbar
调用 Snackbar.make((dialogView, "text", duration))
,其中 dialogView
是您的自定义视图。
绝对可以,你只需要将 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();
结果
注意:
无需使用 CoordinatorLayout
作为根。在我的示例中,我只是使用 LinearLayout 作为根。
如果您使用的是 Dialog
那么:
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();
}
在Snackbar.make()
中使用getDialog().getWindow().getDecorView()
Snackbar
.make(getDialog().getWindow().getDecorView(), "SnackBar in Dialog", Snackbar.LENGTH_LONG)
.show();
我正在开发 android 应用程序。因为我想在对话框中显示 material design Snackbar。可能吗?如果是那么怎么办?
请帮助我。
谢谢。
是的,你可以。
要在 Dialog
中显示 Snackbar
,请为其创建自定义 View
。您可以在这里阅读更多相关信息:Dialogs/Creating a Custom Layout
然后为了显示 Snackbar
调用 Snackbar.make((dialogView, "text", duration))
,其中 dialogView
是您的自定义视图。
绝对可以,你只需要将 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();
结果
注意:
无需使用 CoordinatorLayout
作为根。在我的示例中,我只是使用 LinearLayout 作为根。
如果您使用的是 Dialog
那么:
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();
}
在Snackbar.make()
中使用getDialog().getWindow().getDecorView()
Snackbar
.make(getDialog().getWindow().getDecorView(), "SnackBar in Dialog", Snackbar.LENGTH_LONG)
.show();