Kotlinで作るAndroidアプリ・・dp,spとスクリーンサイズの取得
こんにちは、川上です。
複数で沢山のButtonやTextView等を使う場合に、xmlでチマチマに書くのはヤだよね。
 やっぱり、コーディングで一括にできる方が楽すよね。
アナログ時計の12個の数字文字を表示するには、やっぱ、コーディングでベタベタで書くのが早いすよね。
 サンプルプロジェクトの
  「ConstraintLayoutのCircular positioningでアナログ時計を作った」
 から参照してもらって、部分的に使用して
1  | override fun onCreate(savedInstanceState: Bundle?)  | 
内よりコールして
 ・ fun dispClockBoard()
 を、作成表示しましたが、スマフォの横置きでの時計文字の表示位置が、画面内に収まりできませんでした。
 
スマフォの縦横置きスクリーンサイズが取得が必要で、System内のライフサイクル関数で
1  | override fun onWindowFocusChanged(hasFocus: Boolean)  | 
内からコールにして、
 ・dp
 ・sp
 なるもの値をLogで吐き出しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  | エミュレータ 縦 --- 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の中心点から半径長の表示値でぇす。。
ちなみに、取得したスクリーンサイズは、
1 2 3 4 5 6 7 8 9 10 11 12 13  | エミュレータ 縦 --- 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で見れましたが・・
1 2 3 4 5 6  |  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のサイズより、文字の表示位置で半径の値に調整できれば、出来るはず・・・なので、
 文字のレイアウト表示パラメータに、何かしらの調整値を
1  | layoutParams.circleRadius = radius  | 
に設定したけど、お趣み向けの表示が
  ー なぜ?
 でした。 結局・・・・には。
ではでは。。

