Androidの画面サイズ取得はこうする!

DisplayクラスのgetSize()メソッドだと、ナビゲーションバーを含んだサイズが取れない。


すると、困ったことに、アプリから隠しAPIであるSurface.screenshot()を用いてスクリーンキャプチャをとろうとした時に、縦におしつぶされたようなキャプチャ画像となってしまう。これは困った。


そこで、こんなページにぶちあたった。

画面サイズを攻略して機種依存を吸収する


このページでは丁寧にAPIレベルを見て分岐させているが、
getRawSizeというメソッド、じつはICSくらいから実装されている。
ということは・・・


こんなかんじで、思ったよりは簡単にかけるわけだ。

 private Point getDisplaySize(Display display){
Point p = new Point();
try {
Method getRealSize = Display.class.getMethod("getRealSize", Point.class);
getRealSize.invoke(display, p);
} catch (Exception e) {
Log.e(TAG,e.getMessage());
}
return p;
}

実際にNexus 7(Android 4.2.1)で実行させたところ、ちゃんと歪みのないキャプチャがとれた。

ここまでできれば、あとは、getSizeのheightとgetRawSizeのheightの差分から、ナビゲーションバーの部分を消す、といったことができる。