AndroidでViewのサイズを取得する方法

2019年5月17日

本稿ではViewの高さと幅を取得する方法を説明してきます。

それでは早速次項を見ていきましょう。

 

 

onCreateでgetWidth()で幅をgetHeight()で高さを取得すると・・・

下記のように素直にonCreateで

getWidth()とgetHeight()をコールすると幅や高さが0で返ってきます。

0が返ってくる理由としてはViewがActivityに設置される前に幅や高さを取得しているからです。

 

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    Button button = findViewById(R.id.button);
    Log.d("MainActivity : ", "ボタン幅 = " + button.getWidth());
    Log.d("MainActivity : ", "ボタン高さ = " + button.getHeight());
}

 

ViewTreeObserverを使用してViewが設置された後にビューの幅や高さを取得する

ViewTreeObserverを使用してOnGlobalLayoutListenerの中で

getWidth()とgetHeight()すると正しくViewの幅と高さを取得できます。

public class MainActivity extends Activity{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        final Button button = (Button)findViewById(R.id.button);
        ViewTreeObserver observer = button.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Log.d("MainActivity : ", "ボタン幅 = " + button.getWidth());
                Log.d("MainActivity : ", "ボタン高さ = " + button.getHeight());
            }
        });
    }
}