所以我使用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;
}
}
答案 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而不是相对而惹恼。