创建本机 material 设计警报对话框

Creating a native material design alert dialog

Android Studio 1.4
compile 'com.android.support:appcompat-v7:22.2.1'

您好,

我创建了以下 Material 设计对话框。但是EditText框并没有遵循设计理念。因为它在宽度上与父级匹配。我需要 EditText 来获取用户输入。我不想使用任何库,因为我宁愿在本地使用它。

这是我现在拥有的:

这是我正在使用的样式:

<style name="InvitationDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">#FFCC00</item>
    <item name="android:textColorPrimary">#FFFFFF</item>
    <item name="android:background">#5FA3D0</item>
</style>

下面是创建对话框的代码:

        final AlertDialog builder = new AlertDialog.Builder(getActivity(), R.style.InvitationDialog)
                .setPositiveButton(R.string.invitation_accept, null)
                .setNegativeButton(R.string.invitation_decline, null)
                .create();

        final EditText etNickName = new EditText(getActivity());
        builder.setView(etNickName);
        builder.setTitle(R.string.accept_invitation);
        final String username = "steve";
        final String roomName = "happy room";
        builder.setMessage(username + " has invited you to join " + roomName + " for lots of fun chatting");

        builder.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                final Button btnAccept = builder.getButton(AlertDialog.BUTTON_POSITIVE);
                btnAccept.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(etNickName.getText().toString().isEmpty()) {
                            Toast.makeText(getActivity(), "Enter a user name", Toast.LENGTH_SHORT).show();
                        }
                        else {
                            Log.d(TAG, "You have entered: " + etNickName.getText().toString());
                            builder.dismiss();
                        }
                    }
                });

                final Button btnDecline = builder.getButton(DialogInterface.BUTTON_NEGATIVE);
                btnDecline.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Log.d(TAG, "Invitation declined");
                        builder.dismiss();
                    }
                });
            }
        });

        /* Show the dialog */
        builder.show();

非常感谢您的任何建议,

据我所知,最大的问题是边距。为此,您可以在对话框的布局文件中添加一些属性。例如:

<EditText
    android:id="@+id/etName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/tvInvitationText"
    android:layout_marginTop="24dp"
    android:layout_marginLeft="24dp"
    android:layout_marginRight="24dp"
    android:lines="1"
    android:maxLines="1"
    android:inputType="text"
    android:textAppearance="@style/TextAppearance.AppCompat.Medium"
    android:hint="@string/sEnterYourName" >

    <requestFocus />
</EditText>