LoginSignup
84

More than 5 years have passed since last update.

Android 画面サイズ取得方法

Last updated at Posted at 2015-10-05

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84