我有一个习惯View
。在视图的构造函数中,我创建并添加了两个子视图。但是,使用LayoutParams.addRule()
会导致一些问题。诸如CENTER_HORIZONTAL
工作之类的规则,但是当我尝试使用ABOVE
时,子视图的高度为0。
这是我的构造函数中的代码:
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
mLayoutParams = new LayoutParams(width, height);
mLayoutParams.leftMargin = left;
mLayoutParams.topMargin = top;
mImage = new ImageView(getContext());
mImage.setImageDrawable(getResources().getDrawable(R.drawable.my_image_drawable));
mImage.setScaleType(ScaleType.FIT_XY);
mImage.setId(R.id.my_image_id);
addView(mImage, mLayoutParams);
mText = new TextView(getContext());
mText.setText(R.string.my_text);
mText.setId(R.id.my_text_id);
LayoutParams textParams = new LayoutParams(200, 40);
// textParams.addRule(CENTER_HORIZONTAL, TRUE); //Works
textParams.addRule(ABOVE, mImage.getId()); //Doesn't work
addView(mText, textParams);
如果我用设备监视器检查模拟器上的视图,我可以看到layout_height
文本的 40,但顶部、底部和高度参数都是 0。measuredHeight
似乎与屏幕宽度相同。
- 我在添加规则时做错了吗?
- 有没有更好的地方添加规则?有什么事情需要先发生吗?
- 还有其他选择吗?使
TextView
高度为 FILL_PARENT、重力 BOTTOM,并将其底部边距设置为图像的高度,但我需要能够在文本上方添加另一个视图,这不适用于此。