Kotlinで作るAndroidアプリ・・TextViewの動的位置の設定
こんにちは。川上です。
時計盤にTextViewで12個の文字位置を
・ タブレットのLGT02
・ AVDのPixel 2
で起動できて、スマフォの縦横置きで表示状態を回転させても、ちゃんと文字位置ができないとアカンでしょうwね。
System内のライフサイクル関数の
1 | override fun onWindowFocusChanged(hasFocus: Boolean) |
を使って、縦横置きを受けてスクリーンサイズを取得するのは、多分、正解。
表示画面のスクリーンサイズから、dp値の
1 | radius = resources.getDimensionPixelSize(R.dimen.circle_radius) |
を、上手にかじって調整できて
1 | layoutParams.circleRadius = radius |
と思ってましたが・・アカンでした。orz..
ー オイラ、ちゃんとdpやspの意味がわかってねぇw・・・
結局、縦横画面で取得したスクリーンサイズの
・ width
・ height
の”短いサイズの方で調整”して、フツーにradiusに設定してみました。
”調整”で該当サイズを使えようとした時に、
ー へぇ・・ Kotlinに三項演算子が無いんだぁ・・
で、少し\(◎o◎)/!でした。
ー へぇ・・ if hoge else hoge_hoge でするんだ・・
以下、上手いことできたTextViewの位置処理です。
(かなり、端折ってます。。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | // レイアウト初期表示後の動的の表示設定 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ね。
ではでは。