2017/12/19
久々に開発ネタを。
現在とあるアプリを制作しているのですが、ViewのサイズをWidthはmatch_parentで、HeightをWidthと同じにして正方形にしたいということがありました。
調べてみると、StackOverflowに先人がおなじ質問をしていました。
How to set fixed aspect ratio for a layout in Android
Any suggestions will be appreciate, thanks in adv…
1 2 3 4 5 6 7 8 | <span class="pun">view.</span><span class="pln">getViewTreeObserver</span><span class="pun">().</span><span class="pln">addOnGlobalLayoutListener</span><span class="pun">(</span><span class="kwd">new</span> <span class="typ">OnGlobalLayoutListener</span><span class="pun">()</span> <span class="pun">{</span> <span class="lit">@Override</span> <span class="kwd">public</span> <span class="kwd">void</span><span class="pln"> onGlobalLayout</span><span class="pun">()</span> <span class="pun">{</span> <span class="typ">LayoutParams</span><span class="pln"> layout </span><span class="pun">=</span><span class="pln"> view</span><span class="pun">.</span><span class="pln">getLayoutParams</span><span class="pun">();</span><span class="pln"> layout</span><span class="pun">.</span><span class="pln">height </span><span class="pun">=</span><span class="pln"> view</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">();</span><span class="pln"> view</span><span class="pun">.</span><span class="pln">setLayoutParams</span><span class="pun">(</span><span class="pln">layout</span><span class="pun">);</span><span class="pln"> view</span><span class="pun">.</span><span class="pln">getViewTreeObserver</span><span class="pun">().</span><span class="pln">removeGlobalOnLayoutListener</span><span class="pun">(</span><span class="kwd">this</span><span class="pun">);</span> <span class="pun">} </span> |
onCreateの段階だとまだサイズが計測されておらず0になるので、OnGlobalLayoutListenerというのにセットしてあげればいいそうです。他にも、
getWidth() and getHeight() of View returns 0
こちらを見ると、onWindowFocusChangedに書いても計測されたサイズが得られるようですね。
画面回転した時とかって上記の二つって呼び出されるのでしょうか・・・?
またおいおい検証します。