Kotlinで作るAndroidアプリ・・TextViewの動的位置の設定

こんにちは。川上です。
時計盤にTextViewで12個の文字位置を
・ タブレットのLGT02
・ AVDのPixel 2
で起動できて、スマフォの縦横置きで表示状態を回転させても、ちゃんと文字位置ができないとアカンでしょうwね。
System内のライフサイクル関数の
override fun onWindowFocusChanged(hasFocus: Boolean)
を使って、縦横置きを受けてスクリーンサイズを取得するのは、多分、正解。
表示画面のスクリーンサイズから、dp値の
radius = resources.getDimensionPixelSize(R.dimen.circle_radius)
を、上手にかじって調整できて
layoutParams.circleRadius = radius
と思ってましたが・・アカンでした。orz..
ー オイラ、ちゃんとdpやspの意味がわかってねぇw・・・
結局、縦横画面で取得したスクリーンサイズの
・ width
・ height
の”短いサイズの方で調整”して、フツーにradiusに設定してみました。
”調整”で該当サイズを使えようとした時に、
ー へぇ・・ Kotlinに三項演算子が無いんだぁ・・
で、少し\(◎o◎)/!でした。
ー へぇ・・ if hoge else hoge_hoge でするんだ・・
以下、上手いことできたTextViewの位置処理です。
(かなり、端折ってます。。)
// レイアウト初期表示後の動的の表示設定 override fun onWindowFocusChanged(hasFocus: Boolean) { super.onWindowFocusChanged(hasFocus) val metrics : DisplayMetrics = this.getResources().getDisplayMetrics() // println("--- metrics.density = $metrics.density ---") val width = metrics.widthPixels val height = metrics.heightPixels // println("--- println() --> Width = $width,Height = $height ---") // 半分の3/4の半径長さ var hankei_bs = (if (width > height) height else width ) / 2 var hankei = hankei_bs * 3 / 4 // println("--- hankei = $hankei ---") // 時計盤の数字表示 dispClockBoard(hankei) } // 時計盤の数字表示 fun dispClockBoard(hankei_dp :Int) { val baseVw = this.base_view for (i in 1..PARTITIONS) { val textView = TextView(this) textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, resources.getDimension(R.dimen.text_size)) val layoutParams = ConstraintLayout.LayoutParams( ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT) layoutParams.circleConstraint = base_png.id // 時計数字位置の取得 layoutParams.circleAngle = CircleUtil.computeAngleByIndex(PARTITIONS, i) layoutParams.circleRadius = hankei_dp textView.layoutParams = layoutParams textView.text = i.toString() // 時計盤の数文字の組み込み baseVw.addView(textView) }
次は、各針を回転しての時間処理ですwね。
ではでは。