-
Notifications
You must be signed in to change notification settings - Fork 0
Android getWidth=0
ythy edited this page Nov 10, 2017
·
1 revision
You cannot use the width/height/getMeasuredWidth/getMeasuredHeight
on a View
before the system renders it (typically from onCreate/onResume
).
Simple solution for this is to post a Runnable
to the layout. The runnable
will be executed after the View has been laid out.
because :
The UI event queue will process events in order. After setContentView()
is invoked, the event queue will contain a message asking for a relayout, so anything you post to the queue will happen after the layout pass
BoxesLayout = (RelativeLayout) findViewById(R.id.BoxesLinearLayout);
BoxesLayout.post(new Runnable() {
@Override
public void run() {
int w = BoxesLayout.getMeasuredWidth();
int h = BoxesLayout.getMeasuredHeight();
...
}
});
Use the ViewTreeObserver
on the View to wait for the first layout. Only after the first layout will getWidth()/getHeight()/getMeasuredWidth()/getMeasuredHeight()
work.
ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
viewWidth = mediaGallery.getWidth();
viewHeight = mediaGallery.getHeight();
}
});
}
获取getMeasuredWidth之前先measure一下
myImage.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int height = myImage.getMeasuredHeight();
int width = myImage.getMeasuredWidth();
tell me how get back to sunshine