【发布时间】:2011-09-01 07:27:52
【问题描述】:
所以我正在使用 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 设置为什么(包括硬编码的像素值),它仍然会填满我的模拟器上的整个屏幕。
我希望这里缺少一些简单的东西?
编辑:我查看了 Hierarchy Viewer,我在这个问题中包含的布局是正确定义的,但它被包裹在 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", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
} // end "Cancel" onClick
}).create();
default:
return null;
}
}
【问题讨论】:
-
不知道,没有足够的细节抱歉。为什么不创建一个新的 Dialog(this);然后设置内容视图?
-
我很高兴允许 AlertDialog 类处理繁重的工作,而只是担心从 DialogInterface.OnClickListener() 中的两个 EditText 字段中获取文本
-
你能把代码贴在你添加了 AlertDialog 的地方吗?
标签: java android android-layout