プログラムでAndroidの画面サイズを取得するにはどうすればよいですか?
タッチイベントとビュー測定/レイアウトで使用される単位で、プログラムで画面サイズを確認するにはどうすればよいですか?言い換えれば、私はタッチイベントで使用される座標系では、画面の右下隅の座標をしたい getRawX()/getRawY()とView.getLocationOnScreen()。 私の携帯電話にはさまざまなモードの「ピクセル」の概念がいくつかあり、それらが一貫したストーリーになっていないため、目的のイベント/ビューユニットを「ピクセル」と呼ぶのをためらっています。 私はこれがstackoverflowや他の場所で多く尋ねられて答えられているのを見ますが、答えはどれも実際に私の携帯電話(droid 4、android 4.1.2)ですべてのモードで機能しません: Androidアプリでプログラムによって画面の幅を確認できますか? AndroidでScreenSizeをプログラムで取得する方法 Androidは、画面サイズに基づいてプログラムでビューの可視性を設定します Androidで画面の高さを取得するにはどうすればよいですか? Androidで画面の高さを取得する https://groups.google.com/forum/#!topic/android-developers/IpxnfvDFrpc http://shuklaxyz.blogspot.com/2012/02/how-to-programmatically-figure-out.html http://coderock.net/how-to-determine-screen-resolution-programmatically/ http://www.codeproject.com/Tips/313848/Get-actual-screen-size-for-the-application-layout Androidおよびdp単位でプログラム的に幅と高さを設定する http://www.simplecodestuffs.com/how-to-get-screen-dimensions-programmatically-in-android/ http://www.androidsnippets.com/get-size-and-orientation-of-the-screen http://grokbase.com/t/gg/android-developers/127aatfqb6/how-to-determine-screen-resolution-programmatically (ワオ!) これは、アプリが「画面互換モード」(つまり、マニフェストでtargetSdkVersion <= 10)であるかどうかに関係なく機能する必要があるライブラリコード用であり、位置、サイズについても想定しません。 、またはステータスバーまたはその他の同様の画面装飾の存在。 事実は次のとおりです。 私の電話(android 4.1.2を実行しているdroid 4)には、540x960の物理ピクセルがあります。 タッチイベントの表示と測定値の表示から求められる単位での画面のサイズは、アプリが画面互換モードの場合は360x640、画面互換モードでない場合は540x960です。これらは私がプログラムで見つける必要のある数値であり、それらを見つけるためにタッチイベントやビューを操作する必要はありませんが、これらの数値を返すAPIを見つけるのは非常に困難です。 さまざまな方法で取得されたDisplayオブジェクトとDisplayMetricsオブジェクトはすべて、画面サイズが540x960 "ピクセル"(画面互換モードかどうかに関係なく)であると主張しています。具体的には、次の例では常に540x960と表示されます:DisplayMetrics。{width、height} Pixels、Display.getSize()、Display.getRealSize()、Display.get {Width、Height}()、 さまざまな方法で取得された構成オブジェクトは、すべてscreen {Width、Height} Dp = 360x614(画面互換モードかどうかに関係なく)と言います。アスペクト比が間違っているので、画面全体を表すとは思いません。(それは画面全体からステータスバーを引いたものだと思います。画面全体が必要です。)画面全体が360x640 dpであると言っても安全ですが、640を返すAPIはわかりません。 さまざまな方法で取得されたDisplayMetricsは、「密度」が画面互換モードの場合は1.0f、画面非互換モードの場合は1.5fであると言います。 アクティビティ getWindow().getAttributes().{width,height} は通常MATCH_PARENT 実際のサイズではなく含まれているため、役に立ちません。しかし、私は明らかにアクティビティから望ましい答えを得ることができます getWindow().getDecorView().getMeasured{Width,Height}() (アクティビティのウィンドウのdecorViewが画面全体を占めているように見えないため、これは実際には意外です。それは、画面からステータスバーを引いたように見えます)。しかし、これに依存したくないのは、ウィンドウのサイズが変更された場合(ソフトキーボードが表示された場合、誰かがwindow.setAttributes()を呼び出した場合、またはアクティビティにまったく参加していない場合)、これが明らかにすべてになるためです。違う。 ピクセル= dp *密度画面互換モードでない場合、報告されたすべての数値(上記の(3)、(4)、(5))と一致するようです:540x960 = …