Profilbild
Mazeblog - BlogAppsCode
Homeweißer PfeilCode

in Arbeit..

.. bald ist es soweit 😀

Bis dahin gibt es schon mal ein paar Zeilen Code, wie man für Android eine UI bauen kann, ohne XML oder Compose. Um die Views herum wurden einige Wrapper Klassen geschrieben und diese in eine kleine DSL verpackt. Damit lässt sich sehr einfach eine UI zusammenbauen.

    override fun createLayout(target: FrameLayoutBuilder) {
        instance = this
        with(target) {
            addLinearLayout {
                setOrientationVertical()
                add(ActivityHeader())
                createContent(this)
                add(ActivityFooter())
            }
        }
    }


    private fun createContent(target: LinearLayoutBuilder) {
        with(target) {
            addFrameLayout {
                setLayoutWeight(1f)
                addLinearLayout {
                    setOrientationVertical()
                    addFrameLayout {
                        setLayoutWeight(1f)
                        addSurfaceView {
                            setSurface(Playground)
                        }

                        addRelativeLayout {
                            setGravityBottomRight()
                            addTextView {
                                setVisibleFalse()
                                formatHint(this)
                                addReceiver(Playground.hint) {
                                    setTextId(it)
                                    setVisible(it != R.string.Empty)
                                }
                            }
                        }
                    }
                    createInfoLine(this)
                }
                addFrameLayout {
                    addReceiver(overlay) {
                        replace(it)
                    }
                }
            }
        }
    }

    fun formatHint(target: TextViewBuilder) {
        with(target) {
            setTextSizeSP(20)
            setTextColorID(R.color.hintText)
            setMarginsDP(50, 10, 20, 20)
            setPaddingsDP(20, 10)
            setGravityRight()
            setGradientBackground {
                cornerRadii = getCornerRadii(getPixelFromDP(15).toFloat())
                setStroke(getPixelFromDP(6), getColorFromID(R.color.black))
                setColor(getColorFromID(R.color.hint))
            }
        }
    }

    fun createInfoLine(target: LinearLayoutBuilder) {
        with(target) {
            addLinearLayout {
                setOrientationHorizontal()
                setPaddingsDP(10, 0)
                setBackgroundColorId(R.color.black)
                addTextView {
                    setWidthDP(100)
                    setLayoutWeight(1f)
                    setTextSizeSP(16)
                    setTextColorID(R.color.white)
                    setFontId(R.font.nunito_bold)
                    addReceiver(Playground.mode) {
                        setText(
                            when (it) {
                                Play -> "Build Mode"
                                else -> "Play Mode"
                            }
                        )
                    }
                }
                addTextView {
                    setWidthDP(100)
                    setLayoutWeight(1f)
                    setGravityCenter()
                    setTextSizeSP(16)
                    setTextColorID(R.color.white)
                    setFontId(R.font.nunito_bold)
                    setText("V${BuildConfig.VERSION_CODE}")
                }
                addTextView {
                    setWidthDP(100)
                    setLayoutWeight(1f)
                    setGravityRight()
                    setTextSizeSP(16)
                    setTextColorID(R.color.white)
                    setFontId(R.font.nunito_bold)
                    addReceiver(Playground.currentBoardIndex) {
                        setText("Board ${it + 1}")
                    }
                }
            }
        }
    }