UI building without XML or Compose
- By koje1971
- Android Development
- 0 Replies
Hello,
independent of XML and Compose, there are also other ways to build your UI. I have written some helper classes and put together my UI with a kind of custom DSL. It works almost perfectly. 😊
2
independent of XML and Compose, there are also other ways to build your UI. I have written some helper classes and put together my UI with a kind of custom DSL. It works almost perfectly. 😊
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}") } } } }}
It was old school enough that it had adjustable vents for air flow. The best part about that natural gas grill was we no longer had to eat his cooking over charcoals. He soaked his briquettes in gas.