我的活动右下方有imageview1。在活动开始并调用onWindowFocusChanged后,我想动态创建一个textView并将其放在imageview1(左侧)旁边。我知道我可以通过修改layoutParam来设置textView的位置但是要正确对齐它我会做以下
param.setMargins(0, imageView1.getTop(), rootLayout.getWidth()-imageView1.getLeft()-textView.getWidth, 0);
。问题是我无法找到textView的宽度,因为它尚未绘制。我怎么能绕过这个?
答案 0 :(得分:1)
您可以要求视图自行测量,但您应该指定约束。例如:
final Button button = new Button(this);
button.setText("Button");
button.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
Log.d("Test", "measured width: " + button.getMeasuredWidth());
Log.d("Test", "measured height: " + button.getMeasuredHeight());
然后你得到了:
11-09 10:33:14.316 14959-14959/com.madcucumber.testapplication D/Test: measured width: 264
11-09 10:33:14.316 14959-14959/com.madcucumber.testapplication D/Test: measured height: 144
答案 1 :(得分:0)
使用onSizeChanged可能对您有用:
protected void onSizeChanged(int w,int h,int oldw,int oldh)
在API级别1中添加 当此视图的大小发生更改时,将在布局期间调用此方法。如果刚刚添加到视图层次结构中,则使用旧值0调用。
参数
w此视图的当前宽度。
h此视图的当前高度。
oldw此视图的旧宽度。
oldh这个观点的旧高度。
http://developer.android.com/reference/android/view/View.html#onSizeChanged(int, int, int, int)
你可以使用TreeObserver:
ViewTreeObserver vto = imageView1.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
this.image1.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = imageView1.getMeasuredWidth();
int height = imageView1.getMeasuredHeight();
}
});