问题描述
||
因此,我正在使用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感到惊讶。