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}") } } } } }