どうも〜見習いプログラマーのnaoponです!
7月にハマるものはジャズとブルーベリーです!
さてAndroidでレイアウトするも
たまにViewのサイズがほしい時があります。
でも、なぜかゼロ?!
…悲しいですね。 …切ないですね。
なんでだーと思いましたが、そりゃーまだレンダリングされていなくて、
Viewのサイズが確定していないからじゃないですか。。。
んじゃViewサイズ確定後に取れば良いじゃん!
ということで、おまじない。
Viewのサイズを取るだけなら他にもいくつか方法がありますが、
onGlobalLayout()を使えば個々のViewのレンダリング後のサイズを
手っ取り早く取得することが可能です。
1 2 3 4 5 6 7 8 9 10 11 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); (対象のビュー).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //★ここでサイズとれるよ } }); } |
でも実は用途によってはonGlobalLayout()が何度も呼ばれる時もあるから、
何回もよばれちゃって嫌だなーって人は、こんな感じでやれば良いかもね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); (対象のビュー).getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { //★削除もできるよっ if (Build.VERSION.SDK_INT >= 16) { (対象のビュー).getViewTreeObserver().removeOnGlobalLayoutListener(this); } else { (対象のビュー).getViewTreeObserver().removeGlobalOnLayoutListener(this); } } }); } |
ようするに、扉は、開けたら閉めるぅ〜!的な。
登録したら解除してぇ〜〜!ってことですね。
いや〜僕は、ButtonとかLayoutに動的にDrawableを生成してあててたんですが、
これで解決しました。