kar*_*arl 5 android relativelayout android-layout android-view
我有一个习惯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);
Run Code Online (Sandbox Code Playgroud)
如果我使用设备监视器检查仿真器上的视图,我可以看到layout_height文本的视图是40,但是top,bottom和height参数都是0. measuredHeight看起来与屏幕宽度相同.
TextView高度设置为FILL_PARENT,重力为BOTTOM,并将其下边距设置为图像的高度,但我需要能够在文本上方添加另一个视图,这对此不起作用.您在代码中的哪个位置检查高度?如果它位于 onCreate 或 onCreateView 中的某个位置,您将不会获得任何信息。布局是一个两遍过程,在这两种方法中,两遍并不完整。
您可能需要使用“.post”方法来获取这些方法中的高度,如下所示:
myView.post( new Runnable() {
@Override
public void run() {
int height = myView.getHeight();
}
});
Run Code Online (Sandbox Code Playgroud)
runnable 使其在 UI 线程上运行,但它是在测量传递和布局传递这两个传递完成后调用的。因此,在不知道测量值的情况下尝试基于中心水平线设置规则将会失败。
| 归档时间: |
|
| 查看次数: |
2965 次 |
| 最近记录: |