Android

Android 画面サイズ取得方法

More than 3 years have passed since last update.

Android端末は多種多様であり、ディスプレイサイズも様々です。

またアプリケーションによっては使用する範囲が画面サイズなのか、タイトルバーを含むハードウェアサイズなのかで用意するコンテンツも異なります。

今回は対象端末の各サイズを取得する方法を紹介します。


プログラム


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

諸処解説します。

●getDisplaySizeはコンテンツ領域とタイトルバーを含んだサイズになります。

※イメージでは青色の枠

●getRealSizeは端末ディスプレイ全体のサイズになります。

※イメージでは赤色の枠

●getViewSizeはコンテンツ領域のサイズになります。

※イメージでは緑色の枠

※各Viewコンテンツのサイズも取得可能(TextViewなど)

※取得の際に注意が必要(下記を参考)


getViewSizeの注意点

getViewSizeはコンテンツ領域のサイズはViewコンテンツを指定して取得します。

ただAcitivity内のonCreateで取得した場合、値が0のままで返ってしまうので、画面のコンテンツ領域サイズを取得する場合は、Activity#onWindowFocusChangedメソッドから取得してください。

※参考プログラム


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());
}