2015-09-20

Android デバイスの画面サイズを取得

Android デバイスの画面サイズを取得する場合、アプリの用途によって取得したい画面上のサイズが異なると思います。自分が調べた限りで取得可能な画面サイズを記しておきます。

取得可能な画面サイズと取得した値


以下に、取得可能な画面サイズと取得した値を図示します。


① ハードウェアサイズ

Android デバイスの画面全体のサイズです。最上部のステータスバーから最下部のナビゲーションバー全てを含む画面サイズです。

② ディスプレイサイズ

ハードウェアサイズからナビゲーションバーを除いた画面サイズです。

③ レイアウトサイズ

レイアウトのサイズを取得することで、ハードウェアサイズからステータスバー、アクションバー、ナビゲーションバーを除いたアプリのコンテンツを表示する画面サイズが分かります。

画面サイズを取得するコード

画面サイズを取得して表示するためのソースコードを以下に記します。
『①ハードウェアサイズ』と 『②ディスプレイサイズ』は onCreate() メソッド内で取得可能ですが、『③レイアウトサイズ』は onCreate() メソッド内で取得すると 0 で取得してしまうので  onWindowFocusChanged() メソッド内で取得するようにします。
public class MainActivity extends Activity {
    LinearLayout ll;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ll = new LinearLayout(this);
        setContentView(ll);

        tv = new TextView(this);
        tv.setTextSize(18.0f);
        ll.addView(tv);

        Display d = getWindowManager().getDefaultDisplay();
        Point p1 = new Point();
        Point p2 = new Point();

        // ①ハードウェアの画面サイズを取得
        d.getRealSize(p1);
        // ②ナビゲーションバーを除く画面サイズを取得
        d.getSize(p2);

        tv.setText("①ハードウェアの画面サイズ\n"
                + "width  :" + p1.x + "\n"
                + "height :" + p1.y + "\n\n"
                + "②ナビゲーションバーを除く画面サイズ\n"
                + "width  :" + p2.x + "\n"
                + "height :" + p2.y + "\n\n");
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        // ③レイアウトサイズを取得(getWidth() と getHeight())
        tv.setText(tv.getText()
                + "③画面上のレイアウトサイズ\n"
                + "width  :" + ll.getWidth() + "\n"
                + "height :" + ll.getHeight());
    }
}

0 件のコメント:

コメントを投稿