[[ blog 이사 과정에서 정확한 posting날짜가 분실됨. 년도와 분기 정도는 맞지 않을까? ]]
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.
Note!
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.
'Domain > Android' 카테고리의 다른 글
[Android] Classify unexpected cases (0) | 2010.10.29 |
---|---|
[Android] Eclipse: Android requires .class compatibility set ...to 5.0 (0) | 2010.06.15 |
[Android-Eclair] Miscellaneous tips. (0) | 2010.04.09 |
[Android-Ecliar][Tips] build Android.. (0) | 2009.12.03 |
[Android] Activity... (0) | 2009.10.31 |