2012/01/28

Android で View.getWidth() が 0 になる件

Activity.onCreate() とかライフサイクルの最初の方で View.getWidth() しても 0 になるのは、
結構有名どこ。
違う要因で 0 になった。


画像一枚のレイアウト。
最初は非表示で、なにか処理が始まると同時に表示して、終わったらまた非表示に。
ローディング中のイメージ。
だいぶ簡素化してみた。

Activity はこんな感じ。


onCreate() の中で getWidth() 、 getHeight() が取れないのは想定の範囲内。
でも、 onWindowFocusChanged() の中ででも取れない。

これは View の visibility が原因。
こう変える


ConstantValueDescription
visible0Visible on screen; the default value.
invisible1Not displayed, but taken into account during layout (space is left for it).
gone2Completely hidden, as if the view had not been added.

invisible の場合は見えないけど"そこにはいる"から取得できる。
gone の場合には"いない"ので、View のプロパティ取得までにはタイムラグがあるようだ。

あまり深く考えたくないので invisible でいくことにする。