Android自定义AlertDialog高度不符合布局参数

时间:2011-05-24 21:33:14

标签: java android android-layout

所以我使用Builder创建自定义AlertDialog。我有一个自定义视图,我在对话框中使用以下布局进行充气:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" >

    <EditText android:id="@+id/edit_username" 
        style="@style/EditPassword"
        android:hint="@string/login_username_hint" />

    <EditText android:id="@+id/edit_password" 
        style="@style/EditPassword"
        android:hint="@string/login_password_hint" />

</LinearLayout>

EditText控件的android:layout_height样式设置为“wrap_content”。当我使用此自定义视图显示对话框时,对话框将被拉伸以填充整个屏幕的高度。无论我将LinearLayout上的layout_height设置为(包括硬编码像素值),它仍会在我的模拟器上填满整个屏幕。

我希望我在这里找到一些简单的东西?

编辑:我查看了层次结构查看器,我在这个问题中包含的布局是正确定义的,但是它被包装在FrameLayout中的FrameLayout中,最外面的FrameLayout被设置为“wrap_content”但是在Viewer中呈现在它下面有一堆空的空间。

编辑2:根据要求,使布局膨胀的代码。

protected Dialog onCreateDialog(int id) {
    switch(id) {
    case AUTHENTICATION_DIALOG:
        LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
        final View loginView = inflater.inflate(R.layout.login_dialog, null);
        return new AlertDialog.Builder(HomeActivity.this)
            .setTitle("Upload profile data")
            .setView(loginView)
            .setPositiveButton("Upload", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    EditText userName = (EditText)loginView.findViewById(R.id.edit_username);
                    EditText password = (EditText)loginView.findViewById(R.id.edit_password);
                    String userNameStr = StringUtils.convertToTrimmedString(userName.getText());
                    String passwordStr = StringUtils.convertToTrimmedString(password.getText());

                    if (userNameStr.equals("") || passwordStr.equals("")) {
                        new AlertDialog.Builder(HomeActivity.this)
                            .setTitle("Required fields missing")
                            .setMessage("You must enter a username and password")
                            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    HomeActivity.this.showDialog(AUTHENTICATION_DIALOG);
                                    dialog.dismiss();
                                }
                            }).show();
                    } else {
                        dialog.dismiss();
                    } // end if user entered username and password
                } // end "Upload" onClick
            }) // end setPositiveButton DialogInterface.OnClickListener()
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                } // end "Cancel" onClick
            }).create();
    default:
        return null;
    }
}

1 个答案:

答案 0 :(得分:0)

所以我转而使用像这样的RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content" >

    <EditText android:id="@+id/edit_username" 
        style="@style/EditPassword"
        android:hint="@string/login_username_hint" />

    <EditText android:id="@+id/edit_password" 
        style="@style/EditPassword"
        android:layout_below="@+id/edit_username"
        android:hint="@string/login_password_hint" />

</RelativeLayout>

它工作正常。我切换回线性测试,当我切换回LinearLayout时,它表现出旧的破坏行为。我希望没有标记这个答案,希望有人能告诉我为什么它会因为LinearLayout而不是相对而惹恼。