match_parent布局参数不起作用?

时间:2013-07-25 09:30:19

标签: java android layout

我正在尝试为ArrayAdapter创建一个视图。这就是我的做法:

FrameLayout rowView = new FrameLayout(context);
rowView.setBackgroundColor(Color.BLUE);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.MATCH_PARENT,
    RelativeLayout.LayoutParams.WRAP_CONTENT);
lp2.setMargins(0, 0,
    context.getResources()
        .getDimensionPixelSize(R.dimen.activity_divider_small), 0);
lp2.addRule(RelativeLayout.LEFT_OF, R.id.textView1);

ImageView view = new ImageView(context);
int size = context.getResources().getDimensionPixelSize(
        R.dimen.image_avatar_size);
FrameLayout.LayoutParams lp0 = new FrameLayout.LayoutParams(size, size);
view.setBackgroundResource(R.drawable.va);
rowView.addView(view, lp0);

Button btn = new Button(context);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
        RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.MATCH_PARENT);
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
btn.setBackgroundColor(Color.RED);
int padding = context.getResources().getDimensionPixelSize(
        R.dimen.activity_margin);
btn.setPadding(padding, padding, padding, padding);
btn.setText(okButtonText);
btn.setId(R.id.textView1);

RelativeLayout layout = new RelativeLayout(context);
layout.addView(rowView, lp2);
layout.addView(btn, lp);

我的目的是垂直拉伸带有OK标题的textView。由于某种原因,按钮与其父母无法正常匹配。任何人都可以指出我的错误吗?

编辑事情变得非常奇怪。众所周知,如果我们同时设置ALIGN_PARENT_TOP和ALIGN_PARENT_BOTTOM参数,视图将被垂直拉伸。在我的例子中,视图放在布局的底部(就像我只设置ALIGN_PARENT_BOTTOM一样)。

这就是我得到的:

http://img13.imageshack.us/img13/3323/jqs.png

修改

嗯,这个问题看起来有点像平台错误,所以我不得不添加一个调整OK按钮的监听器。

rowView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int height = rowView.getHeight();
        btn.setHeight(height);
    }
});

我仍在寻找更好的解决方案。

1 个答案:

答案 0 :(得分:0)

你应该尝试layout.addView(btn,lp);