Android 画面サイズ取得方法

Android端末は多種多様であり、ディスプレイサイズも様々です。
またアプリケーションによっては使用する範囲が画面サイズなのか、タイトルバーを含むハードウェアサイズなのかで用意するコンテンツも異なります。
今回は対象端末の各サイズを取得する方法を紹介します。

#プログラム
```java:java
import java.lang.reflect.Method;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.Point;
import android.os.Build;
import android.view.Display;
import android.view.View;

public class DisplaySizeCheck {
	
	/**
	 * Get a Display Size
	 * @param activity
	 * @return Point, Point.x or Point.y
	 */
	public static Point getDisplaySize(Activity activity){
        Display display = activity.getWindowManager().getDefaultDisplay();
        Point point = new Point();
        display.getSize(point);
        return point;
	}
	
	/**
	 * Get a Real Size(Hardware Size)
	 * @param activity
	 * @return
	 */
	@SuppressLint("NewApi")
    public static Point getRealSize(Activity activity) {
     
        Display display = activity.getWindowManager().getDefaultDisplay();
        Point point = new Point(0, 0);
     
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            // Android 4.2~
            display.getRealSize(point);
            return point;
     
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
            // Android 3.2~
            try {
                Method getRawWidth = Display.class.getMethod("getRawWidth");
                Method getRawHeight = Display.class.getMethod("getRawHeight");
                int width = (Integer) getRawWidth.invoke(display);
                int height = (Integer) getRawHeight.invoke(display);
                point.set(width, height);
                return point;
     
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
     
        return point;
    }
	
	/**
	 * Get a view size. if display view size, after onWindowFocusChanged of method
	 * @param View
	 * @return
	 */
	public static Point getViewSize(View View){
        Point point = new Point(0, 0);
        point.set(View.getWidth(), View.getHeight());        
        
        return point;
	}

}
```

※参考イメージ
![display.jpg](https://qiita-image-store.s3.amazonaws.com/0/86347/66e87bc9-1206-17fa-9fda-6cd938c6b714.jpeg)

諸処解説します。

●getDisplaySizeはコンテンツ領域とタイトルバーを含んだサイズになります。
※イメージでは青色の枠

●getRealSizeは端末ディスプレイ全体のサイズになります。
※イメージでは赤色の枠

●getViewSizeはコンテンツ領域のサイズになります。
※イメージでは緑色の枠
※各Viewコンテンツのサイズも取得可能（TextViewなど）
※取得の際に注意が必要（下記を参考）


#getViewSizeの注意点
getViewSizeはコンテンツ領域のサイズはViewコンテンツを指定して取得します。
ただAcitivity内のonCreateで取得した場合、値が０のままで返ってしまうので、画面のコンテンツ領域サイズを取得する場合は、Activity#onWindowFocusChangedメソッドから取得してください。
※参考プログラム

```java:java
@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		super.onWindowFocusChanged(hasFocus);
		RelativeLayout r = (RelativeLayout)findViewById(R.id.relativeLayout);
        Point view = DisplaySizeCheck.getViewSize(r);
        
        StringBuilder text = new StringBuilder();
        text.append("ViewSize → X:" + view.x + " Y:" + view.y);
        text.append("\nDisplaySize → X:" + disp.x + " Y:" + disp.y);
        text.append("\nHardwareSize → X:" + real.x + " Y:" + real.y);
        
        dipSize.setText(text.toString());
	}
```