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;
}
}
諸処解説します。
●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());
}