I read that the most benefit of using Anko is its reusability. But i could't find its exact example.
Currently in the new Android layout system, the boiler plate is like below:
DrawerLayout (with some setup)
CoordinatorLayout (with some setup)
AppBarLayout (with some setup)
ToolBar
<The Main Content>
NavigationView (with header inflated)
From the layout structure above, only <The Main Content>
is varry. And
in many cases those ceremonial setup duplicated almost in every activity.
So here with Anko im thinking if there is a reusable solution about that issue. Im not expecting it will be reusable for general purpose layout, but et least i can minimize the ceremonial code in the project. Maybe i need something like:
class MainUI: AnkoComponent<MainActivity> {
override fun createView(ui: AnkoContext<MainActivity>): View{
return with(ui) {
myCustomRootLayout {
//here is what <The Main Content> will be
}
}
}
}
From the code above im expecting myCustomRootLayout
will do all the ceremonial setup for the root layout such as (DrawerLayout, CoordinatorLayout etc etc).
Is that possible?
EDIT So i think my question is: How to make a custom component which can host other component
I actually found a way to do this, took me a while to figure it out.
I have a very basic test layout here, the content gets added to a
RelativeLayout
.The key here is to add your custom layout in a delegated
AnkoContext
that delegates to the immediate parent (theRelativeLayout
in my case).And then you can extend the
BaseAnkoComponent
and build your content in the same way with Anko DSL.I am sure there is a better way to do this but I have not found it. Kinda new to Kotlin and Anko.
One way to reuse the code is to simply extract
myCustomRootLayout
into a extension method like so:However as stated in the documentation:
It seems to be a good idea to extract the reusable piece into separate
AnkoComponent
: