自定义AlertDialog中的布局问题

时间:2012-08-04 23:33:33

标签: android layout

我遇到如下实现的自定义对话框的问题:

    AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);

    dialogBuilder.setTitle("Title");
    dialogBuilder.setMessage("Message");

    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    layout.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);

    // Set an EditText view to get user input
    EditText input = new EditText(this);
    input.setHeight(LayoutParams.WRAP_CONTENT);
    input.setWidth(LayoutParams.MATCH_PARENT);
    layout.addView(input);

    TextView text = new TextView(this);
    text.setText("show some text here");
    text.setHeight(LayoutParams.WRAP_CONTENT);
    text.setWidth(LayoutParams.MATCH_PARENT);
    //text.setHeight(50);
    //text.setWidth(150);
    text.setVisibility(TextView.VISIBLE);
    layout.addView(text);

    Button btn = new Button(this);
    btn.setText("Button");
    btn.setHeight(LayoutParams.WRAP_CONTENT);
    btn.setWidth(LayoutParams.WRAP_CONTENT);
    layout.addView(btn);

    dialogBuilder.setView(layout);
    dialogBuilder.setPositiveButton("Ok", null);

    AlertDialog myDialog = dialogBuilder.create();
    myDialog.show();

问题是,如果我按照上面的代码设置宽度和高度,TextView text就不会出现在对话框中。只有当我对属性(两个注释行)进行硬编码时才会出现,但这不是所需的行为。

此外,虽然Button的宽度设置为WRAP_CONTENT,但它与屏幕一样大。

有人可以指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

你应该使用setLayoutParams()而不是setHeight()和setWidth()

替换

text.setHeight(LayoutParams.WRAP_CONTENT);
text.setWidth(LayoutParams.MATCH_PARENT);

有了这个

text.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));

编辑: 关于Button使用:

btn.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

对我有用......

编辑2: 如果您使用text.setHeight(LayoutParams.WRAP_CONTENT);它等于text.setHeight(-2);,那么您的textView将是-2像素高度,并且在另一只手Buttons上看不见...使用9patch图像的其他图像不会比9patch本身小。