全宽按钮材质对话框

时间:2015-03-20 13:59:53

标签: android material-design android-5.0-lollipop android-dialog

我正在尝试找到一个示例代码来实现带有全宽按钮的材质对话框,如下面的屏幕截图所示。

有人可以通过分享有关如何复制此设计的示例代码来提供帮助吗? enter image description here

4 个答案:

答案 0 :(得分:8)

使用ONLY AppCompat可以实现这一点,请检查我的解决方法:

<强>代码

    import android.support.v7.app.AlertDialog;

    AlertDialog.Builder builder;
    builder = new AlertDialog.Builder(context, R.style.StackedAlertDialogStyle);
    builder.setTitle("Title");
    builder.setMessage("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc dignissim purus eget gravida mollis. Integer in auctor turpis. Morbi auctor, diam eget vestibulum congue, quam arcu pulvinar dui, blandit egestas erat enim non ligula." +
            " Nunc quis laoreet libero. Aliquam consectetur nibh eu arcu eleifend efficitur.");
    builder.setPositiveButton("Positive Button", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    builder.setNeutralButton("Neutral Button", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    builder.setNegativeButton("Cancel Button", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    AlertDialog alertDialog = builder.create();
    alertDialog.show();
        try{
            final Button button = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
            LinearLayout linearLayout = (LinearLayout) button.getParent();
            linearLayout.setOrientation(LinearLayout.VERTICAL);
        } catch(Exception ex){
            //ignore it
        }

<强>风格

<style name="StackedAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="buttonBarButtonStyle">@style/StackedButtonBarButtonStyle</item>
</style>

<style name="StackedButtonBarButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:layout_gravity">right</item>
</style>

<强>结果

Stacked Alert Dialog

答案 1 :(得分:4)

我正在使用它,它对我很有用:

https://github.com/afollestad/material-dialogs

以下是演示:https://play.google.com/store/apps/details?id=com.afollestad.materialdialogssample(包括堆叠按钮)

答案 2 :(得分:1)

以下是我使用ONLY AppCompat库在我的应用中的表现 您可以选择任意数量的

String[] mOptionsArray = new String[]{"Option 1", "Option 2"};
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
    builder.setTitle("Cool! title");
    builder.setMessage("Cool! message");

    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.dialog_list_view, null);
    ListView listView = (ListView) view.findViewById(R.id.list_view);
    listView.setAdapter(new ArrayAdapter<>(
            getContext(),
            R.layout.dialog_list_item,
            R.id.button,
            mOptionsArray
    ));
    listView.setDivider(null);
    listView.setOnItemClickListener(mOnItemClickListener);
    builder.setView(view);

    return builder.create();
}

<强> dialog_list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="8dp"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" />

<强> dialog_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/button"
    style="@style/Widget.AppCompat.Button.Borderless.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@null"
    android:clickable="false"
    android:focusable="false"
    android:gravity="right|center_vertical"
    android:paddingRight="8dp"
    android:paddingLeft="8dp"
    android:text="Button"
    android:textAllCaps="true" />

参考:http://www.materialdoc.com/flat-button/https://material.io/guidelines/components/dialogs.html#dialogs-specshttps://material.io/guidelines/components/buttons.html#buttons-style

Dialog with stacked full-width buttons

答案 3 :(得分:0)

如果按钮上包含长消息文本,这是自动的。

new MaterialAlertDialogBuilder(this)
                .setTitle("Title")
                .setMessage(R.string.lorem_inpsum)
                .setPositiveButton(getResources().getString(R.string.long_positive), null)
                .setNegativeButton(getResources().getString(R.string.long_negative), null)
                .show();

enter image description here

相关问题