【问题标题】:Android custom AlertDialog height not honoring layout parametersAndroid 自定义 AlertDialog 高度不遵守布局参数
【发布时间】: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


【解决方案1】:

所以我改用了这样的 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 和 Relative 而吓坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多