首页 > 解决方案 > Android在MaterialDialog中对齐中心或右对齐标题和消息

问题描述

我在这个地址使用MaterialDialog版本。3.1.1

我想在对话框中右对齐或居中标题和消息,但在文档中找不到如何执行此操作。

我检查了这个页面https://github.com/afollestad/material-dialogs/issues/434有人使用MaterialDialog.Builder这样的代码:

new MaterialDialog.Builder(MainActivity.this)
                    .titleGravity(GravityEnum.END)
                    .contentGravity(GravityEnum.END)
                    .title("چقدر عجله داری بابا!")
                    .content("این ویژگی در نسخه‌ی بعدی فعال خواهد شد! برو بعدن بیا!")
                    .positiveText("باشه. :(")
                    .negativeText("چه بهد")
                    .typeface("iran_sans_bold","iran_sans")
                    .callback(new MaterialDialog.ButtonCallback() {
                        @Override
                        public void onPositive(MaterialDialog dialog) {
                            Log.wtf("+","shod");
                        }

                        @Override
                        public void onNegative(MaterialDialog dialog) {
                            Log.wtf("-","shod");
                        }
                    })
                    .show();

但它在这个版本中接缝 builder remove。我怎样才能做到这一点?

更新 1: MaterialDialog支持基于 android 系统语言更改 layoutDirection 但我有不同的情况,我想根据内容更改 layoutDirection

标签: androidkotlindialogmaterial-dialog

解决方案


您无法使用默认对话框来执行此操作。但显然,您可以从对话框上的自己的布局开始。

自定义警报对话框

这个完整的例子包括将数据传回活动。

在此处输入图像描述

创建自定义布局

EditText这个简单的例子使用了一个带有 an 的布局,但是你可以用任何你喜欢的东西来替换它。

custom_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:paddingLeft="20dp"
              android:paddingRight="20dp"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

在代码中使用对话框

关键部分是

  • 用于setView将自定义布局分配给AlertDialog.Builder
  • 单击对话框按钮时将任何数据发送回活动。

这是上图所示示例项目的完整代码:

MainActivity.java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void showAlertDialogButtonClicked(View view) {

        // create an alert builder
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Name");

        // set the custom layout
        final View customLayout = getLayoutInflater().inflate(R.layout.custom_layout, null);
        builder.setView(customLayout);

        // add a button
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // send data from the AlertDialog to the Activity
                EditText editText = customLayout.findViewById(R.id.editText);
                sendDialogDataToActivity(editText.getText().toString());
            }
        });

        // create and show the alert dialog
        AlertDialog dialog = builder.create();
        dialog.show();
    }

    // do something with the data coming from the AlertDialog
    private void sendDialogDataToActivity(String data) {
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show();
    }
}

笔记

  • 如果您发现自己在多个地方使用它,那么请考虑按​​照文档DialogFragment中的说明创建一个子类。

也可以看看


推荐阅读