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 |
に設定したけど、お趣み向けの表示が
ー なぜ?
でした。 結局・・・・には。
ではでは。。