Android自定义AlertDialog高度不遵循布局参数

问题描述

|| 因此,我正在使用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 \”,但在查看器中使用一堆下面的空白空间。 编辑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\",int which) {
                    dialog.dismiss();
                } // end \"Cancel\" onClick
            }).create();
    default:
        return null;
    }
}
    

解决方法

所以我改用这样的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>
而且效果很好。我切换回Linear进行测试,当我切换回LinearLayout时,它表现出旧的损坏行为。我将保留这个答案,希望有人能告诉我为什么它对LinearLayout vs Relative感到惊讶。