【Android View】ImageViewなどの大きさを取得する方法。役立ちます!

プログラムPG・PC効率UP・ブログ
プログラム

Androidアプリエンジニアのゆーちゃまさんです^^

Webアプリ3年ほど、Androidアプリ開発10年ほどやっています。

  • Viewの大きさが0でちゃんと取れない。。取得のしかたが分からない

この記事を読むことで、Viewの大きさを取得する方法がわかります!

実際に開発していて、よく利用するので知っておくと役にたちます^^

スポンサーリンク

結論: ViewTreeObserver を使って取得する

大きさをレイアウトファイルで固定に設定していないViewの大きさを取得するには…

ViewTreeObserverを使えば、Viewの幅・高さを取得できます!

ゆーちゃま
ゆーちゃま

実際に、コードを見ながら解説します!

スポンサーリンク

Viewが作成されるまで大きさを取得できない

AndroidはViewが作成されてからでないと、幅や高さなどの大きさを取得することができません。

ゆーちゃま
ゆーちゃま

まずは普通にViewの幅・高さを取得してみます

テスト画面
テスト画面

画面中央に背景がピンクのTextViewがあるだけの単純な画面です。

ゆーちゃま
ゆーちゃま

TextViewが真ん中にあるレイアウトxmlです^^

コードonCreate

ゆーちゃま
ゆーちゃま

単純にonCreate()でtextViewを取得して、幅・高さをログに出力しています

実行結果ログ確認

log
log
ゆーちゃま
ゆーちゃま

onCreate()実行時では、まだViewが作成されていないため幅・高さともに0になっています

viewTreeObserverを使用して幅・高さを取得してみる

では、実際にviewTreeObserverを使用してみましょう!

取得したいViewに、onGlobalLayoutListenerを登録します。

そうすると対象のViewの大きさが決定した時点で、onGlobalLyout()のコールバックが呼ばれます。

12行目のremoveをしないと何回も呼ばれてしまうので、注意してください。

viewTreeObserverの実行結果・ログ確認

log2
log2
ゆーちゃま
ゆーちゃま

おお!
幅:294、高さ:57、ちゃんと取得できてますね^^

まとめ

実際の開発でもかなりの頻度で利用するViewTreeObserver

あそこのViewと同じ幅にしたいんだけど…

という動的に大きさ設定する場面などで役立ちます。

簡単に使えますし^^

僕も初心者の頃は知らなくて、幅や高さを取得できなくて困った事があります。

ぜひ、活用してください!

ブログランキング・にほんブログ村へにほんブログ村

↑押してもらえると励みになります^^


人気ブログランキング

こちらもよろしければご覧ください^^

(Visited 98 times, 1 visits today)
スポンサーリンク
スポンサーリンク
スポンサーリンク
PG・PC効率UP・ブログプログラミング
ドロイドブログ

コメント

タイトルとURLをコピーしました