Jetpack Compose is the latest declarative UI development toolkit announced by Android. With compose, many screens can be developed safer and faster with lesser code. Here are the basics of Jetpack Compose:

Jetpack Compose Basics
Androidâs UI Development Journey
Letâs start our article by looking at how creating layouts in Android has evolved over time:
1- XML
In the beginning of the Android development, developers where using xml files for ui development and had to use âfindViewByIDâ for connecting ui items with application logic.(Button click listeners, setText for TextView and so on.)

Android XML Example

findViewById Usage
But it wasnât enough. Developers came up with solutions to improve UI development process:
2- Butter Knife:
While developing UI with Butter Knife, annotate fields with `@BindView` and a view ID for Butter Knife to find and automatically cast the corresponding view in your layout:
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
3- Kotlin Synthetic
With Kotlin Synhetic, we can directly access to xml item by itâs id:
class ExampleActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
itemText.text = "Hello Android!"
}
}
4- Data Binding
With Data Binding you can write less boilerplate and repetitive code. It moves UI operations out of the activities and fragments to the XML layout. You assign the attribute to a variable, in the XML layout:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.myapp.data.ViewModel" />
</data>
<LinearLayout
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewmodel.userName}" />
</LinearLayout>
</layout>
5- View Binding
View Binding is the last feature that made for ui development with xml. Once view binding is enabled in a module, it generates a *binding class* for each XML layout file present in that module. With these binding classes we get references to all views that are in xml:
private lateinit var binding: ResultProfileBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ResultProfileBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
binding.itemText.text = "Hello Android!"
}
Here is a comparison table:
| Method | Readability | Compile Time Safety | Build Speed Impact |
|---|---|---|---|
| findViewById | False | False | True |
| Butter Knife | True | False | False |
| Kotlin Synthetic | True | False | True |
| Data Binding | True | True | False |
| View Binding | True | True | True |
Finally, to make development even faster and easier Jetpack Compose announced.
Note:
We are not suggesting that compose is better than xml in every aspect. For example when it comes to onWindowFocusChanged compose x2 times slower than xml.
Test results on xml vs compose rendering speed:

Xml vs Compose onResume render speed

Xml vs Compose onWindowFocusChanged render speed
What is Jetpack Compose
Android introduced Jetpack Compose, a new declarative UI toolkit for building native user interfaces. It simplifies and accelerates UI development on Android since it requires less code, has great debugging tools and uses Kotlin APIs.
An XML interface can be rewritten with Compose with fewer lines of code:

Xml vs Compose
If we managed to get your attention up to this point, letâs learn the basics of Compose.
Compose Basics
1- Composable Functions
With compose, we define our interfaces as functions. Weâll look at how our beloved âHello Androidâ example is implemented with Compose.
First, we write our composable function(this step is not mandatory but getting a hang of it will make your development much easier):
@Composable // Annotation to say: "This is a composable function"
fun ShowText(name: String) {
Text(text = "Hello $name!") //Composable Text function
}
Now letâs call this function in our MainActivity:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//Since Compose is not derived from Android views,
//Instead of setContentView we use setContent
setContent {
ShowText("Android")
//As a Different Approach:
//Text(text = "Hello Android!")
}
}
}

Run Output
And thatâs it! Wedidnât had to create any xml file, didnât use any binding and printed âHello Androidâ on the emulator with less than 10 lines of code.
2- Layouts
Layouts are one of the essential components of the UI development.
Letâs take a look at how Compose lays out UI elements:
Most basic compose layout components are Column, Row and Box. But what are these?
| Name of the Component | How it Works |
|---|---|
| Column | Inserts item from up to down |
| Row | Inserts item from left to right |
| Box | Inserts item on top of each other |
If we put two Text in a column:
@Composable
fun TwoText() {
Column {
Text(text = "Android")
Text(text = "Jetpack Compose")
}
}

Run Output
You might say: âIt is easy to show two texts đ . Show me how RecyclerView works in Compose.â Hereâs how:
3- RecyclerView in Compose
Forget adapters, this is how you define a recyclerview in Compose:
@Composable
fun ComposeRecyclerView(messages: List<String>) {
LazyColumn {
items(messages) { message ->
Text(message)
}
}
}
LazyColumn will take care of everything for us đ
4- Theming in Compose
Material Design is announced as a design language by Google in 2014. We wonât get into details of it in this article. However, we would like to show some of the changes between the Material Design versions:

Material Design vs Material Design 2

Icons for Material Design vs Material Design 2

Navigation Bar for Material Design 2 vs Material Design 3

Buttons in Material Design 2 vs Material Design 3
With Material Design 3, an Appâs theme can change dynamically according to the wallpaper colors or userâs requests:

Material demo animation
Cool isnât it? đ Since Compose updates UI automatically, supporting this feature is much easier than supporting on xml structure.
Conclusion
In this article, we learned what is jetpack compose, why it is being seen as the future of native android UI development and its basics. If you want to dive deeper in Compose world, you can check out our upcoming Compose article series and Compose documentation:
the compose documentation page
.
Whatâs Next?
- There are pathways for compose that can help you practice development.
- Sample apps if you want to directly dive into code.
- Roadmap for compose to learn upcoming features.
- Compose testimonials from app developers.
- Compose news and videos to keep up with composeâs world.



