创建本机材料设计警报对话框

时间:2015-08-19 04:48:32

标签: android material-design android-alertdialog

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

您好,

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

这就是我现在所拥有的: enter image description here

这是我正在使用的风格:

<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();

非常感谢任何建议,

1 个答案:

答案 0 :(得分:1)

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

<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>