Nikos Hidalgo
Nikos Hidalgo

Reputation: 3756

Is there a material component for Simple Dialog?

As mentioned here, under the different types of Dialogs, the Simple Dialog is listed. Is there a dialog builder that would automatically generate such dialog? Is it just an alert dialog with a custom theme? I would like to replicate a dialog similar to the new permissions dialogs used in Android 10. enter image description here I have tried using the material alert dialog builder:

new MaterialAlertDialogBuilder(context)
            .setTitle("Title")
            .setMessage("Message")
            .setPositiveButton("Ok", null)
            .setNegativeButton("Ok", null)
            .show();

But this shows the options horizontally, whereas I would like to have them vertically. I have many custom dialogs in my app so I could create another one exactly as I need it, but I wanted to get a better understanding of what's ready to use with the material components instead.

For that reason I downloaded the material-components-android project from github, where I found the DialogMainDemoFragment which lists different types of dialogs. The one that is closer to what I want is created like so:

addDialogLauncher(
        dialogLaunchersLayout,
        R.string.long_title_message_too_long_actions,
        new MaterialAlertDialogBuilder(getContext())
            .setTitle(getResources().getString(R.string.long_title))
            .setMessage(message)
            .setPositiveButton(getResources().getString(R.string.too_long_positive), null)
            .setNegativeButton(getResources().getString(R.string.too_long_negative), null)
            .setNeutralButton(getResources().getString(R.string.too_long_neutral), null));

where

private void addDialogLauncher(
      ViewGroup viewGroup, @StringRes int stringResId, AlertDialog.Builder alertDialogBuilder) {
    MaterialButton dialogLauncherButton = new MaterialButton(viewGroup.getContext());
    dialogLauncherButton.setOnClickListener(v -> alertDialogBuilder.show());
    dialogLauncherButton.setText(stringResId);
    viewGroup.addView(dialogLauncherButton);
  }

but I can't see where the styling/theming is being determined.

Upvotes: 0

Views: 1156

Answers (1)

Stanislav Parkhomenko
Stanislav Parkhomenko

Reputation: 489

There is material theme which values you can override. Exactly if I not mistaken you need those styles

    <style name="MaterialAlertDialog.MaterialComponents.Title.Panel.CenterStacked" parent="Base.MaterialAlertDialog.MaterialComponents.Title.Panel">
       <item name="android:orientation">vertical</item>
    </style>

Upvotes: 3

Related Questions