[Android-Eclair] Using exact size of Views

On Android, usually developer just set parameter of layout (LayoutParams.FILL_PARENT … etc) for compatibility.

Then, when the exact size of each view is determined? The size of each View is decided when “onLayout()” is called.

The problem is, sometimes we need to know exact size of some Views and do something with this.
In this case, in my opinion, “onWindowFocusChanged()” is quite good place to do this. (in Activity).
At the moment when “onWindowFocusChanged()” is firstly called, all exact size of Views are decided. That is, we can get each View’s exact size by calling “getWidth()/getHeigh()”. – yes, I know. We need to handle quite many exceptional cases… :-(
But, until now, I cannot find any better place to do this.

Views added at “onLayout” of ViewGroup, are not drawn in Canvas before layout is re-updated!.

pseudo code)

    class View myView {
        onDraw(...) { // -- (*1)

    class LinearLayout layout {
        onLayout(...) {
            addView(myView)... // ---(*2)

At (*2), we can know exact size of ‘layout’. So we can create myView’s instance with layout’s exact size, and add it to ‘layout’.
In this case, even though (*1) is called, (process stops at (*1) when I set breakpoint.), it is not shown in the LCD screen.
Why? Because, newly added view – henceforth new View – is already excluded in the process of calculating View’s exact size. So, layout of this new View is just empty rectangle! So, this cannot be drawn!.
So, all layout(by parameter) in View Tree should be decided, before starting framework’s calculating-layout process (recursive calls of each View’s ‘onLayout()’) to determine exact size of each View in View Tree.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s