大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

Kotlinで作るAndroidアプリ・・dp,spとスクリーンサイズの取得

著者:川上洋
公開日:2019/07/09
最終更新日:2019/07/09
カテゴリー:技術情報 雑記
タグ:

こんにちは、川上です。

複数で沢山のButtonやTextView等を使う場合に、xmlでチマチマに書くのはヤだよね。
やっぱり、コーディングで一括にできる方が楽すよね。

アナログ時計の12個の数字文字を表示するには、やっぱ、コーディングでベタベタで書くのが早いすよね。
サンプルプロジェクトの
 「ConstraintLayoutのCircular positioningでアナログ時計を作った」
から参照してもらって、部分的に使用して

override fun onCreate(savedInstanceState: Bundle?)

内よりコールして
・ fun dispClockBoard()
を、作成表示しましたが、スマフォの横置きでの時計文字の表示位置が、画面内に収まりできませんでした。

スマフォの縦横置きスクリーンサイズが取得が必要で、System内のライフサイクル関数で

override fun onWindowFocusChanged(hasFocus: Boolean)

内からコールにして、
・dp
・sp
なるもの値をLogで吐き出しました。

エミュレータ 縦
--- radius 19dp = 499 --
--- text size 20sp = 52.5 --
エミュレータ 横
--- radius 19dp = 499 --
--- text size 20sp = 52.5 --

******
実機 縦
--- radius 19dp = 253 --
--- text size 20sp = 26.625002 --

実機 横
 --- radius 19dp = 253 --
 --- text size 20sp = 26.625002 --

尚、radiusは、親Viewの中心点から半径長の表示値でぇす。。

ちなみに、取得したスクリーンサイズは、

エミュレータ 縦
--- metrics.density = DisplayMetrics{density=2.625, width=1080, height=1794, 
             scaledDensity=2.625, xdpi=420.0, ydpi=420.0}.density ---
エミュレータ 横
--- metrics.density = DisplayMetrics{density=2.625, width=1794, height=1080, 
             scaledDensity=2.625, xdpi=420.0, ydpi=420.0}.density ---

実機 縦
--- metrics.density = DisplayMetrics{density=1.3312501, width=800, height=1221,
             scaledDensity=1.3312501, xdpi=188.148, ydpi=189.023}.density ---
実機 横
--- metrics.density = DisplayMetrics{density=1.3312501, width=1280, height=741, 
             scaledDensity=1.3312501, xdpi=188.148, ydpi=189.023}.density ---

 ー dpやspってなんぞね?
で、ググから
“【Android】今さら聞けない、px、sp、dip、dpの違い”
を教えてもらいました。

Android StudioのKotlinでxmlに設定されている値をLOGで見れましたが・・

 
 val radius = resources.getDimensionPixelSize(R.dimen.circle_radius)
 val textsize = resources.getDimension(R.dimen.text_size)
  println("--- radius 19dp = $radius --")
  println("--- text size 20sp = $textsize --")
> --- radius 19dp = 499 --
> --- text size 20sp = 52.5 --

 ー う〜ン? よーわからん
縦横置きの表示Viewのサイズより、文字の表示位置で半径の値に調整できれば、出来るはず・・・なので、
文字のレイアウト表示パラメータに、何かしらの調整値を

 
layoutParams.circleRadius = radius

に設定したけど、お趣み向けの表示が
 ー なぜ?
でした。 結局・・・・には。

ではでは。。

    前の記事 :
    上に戻る