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

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

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

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

こんにちは。川上です。

時計盤に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ね。

ではでは。

    上に戻る