Getting Started with Jetpack Compose Fundamentals

Composable Functions and Preview Annotations

package com.example.jetpackcompose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.res.imageResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.jetpackcompose.ui.theme.AppTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            GreetingCard(title = "Android Development")
        }
    }

    @Composable
    fun GreetingCard(title: String) {
        Text(text = "Welcome to $title!")
    }

    @Preview(showBackground = true)
    @Composable
    fun PreviewGreetingCard() {
        GreetingCard(title = "Compose Framework")
    }
}

Layout Composition

Compose builds UI hierarchies through nested composable function calls. Column arranges children vertically, Row positions elements horizontally, and Box overlays components.

package com.example.jetpackcompose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable

class LayoutActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PostCard(postData = Post("Developer", "Learning Jetpack Compose"))
        }
    }

    @Composable
    fun PostCard(postData: Post) {
        Column {
            Text(text = postData.username)
            Text(text = postData.content)
        }
    }

    data class Post(val username: String, val content: String)
}
package com.example.jetpackcompose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.painterResource

class ProfileActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ProfileCard(LayoutActivity.Post("Developer", "Exploring Compose"))
        }
    }

    @Composable
    fun ProfileCard(profile: LayoutActivity.Post) {
        Row {
            Image(
                painter = painterResource(id = R.drawable.profile_icon),
                contentDescription = null
            )
            Column {
                Text(text = profile.username)
                Text(text = profile.content)
            }
        }
    }
}

Layout Customization

Modifires in Compose provide fine-grained control over component appearance and behavior:

package com.example.jetpackcompose

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp

class StyledActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            StyledProfile(
                userData = UserProfile(
                    "Alex Johnson",
                    "Senior Android Engineer"
                )
            )
        }
    }

    @Composable
    fun StyledProfile(userData: UserProfile) {
        Row(modifier = Modifier.padding(16.dp)) {
            Image(
                painter = painterResource(id = R.drawable.avatar),
                contentDescription = null,
                modifier = Modifier
                    .size(64.dp)
                    .clip(CircleShape)
            )
            Column(modifier = Modifier.padding(start = 12.dp)) {
                Text(text = userData.name)
                Text(text = userData.role)
            }
        }
    }

    data class UserProfile(val name: String, val role: String)
}

Tags: jetpack-compose android-development ui-framework kotlin

Posted on Sun, 23 Aug 2026 16:54:51 +0000 by sottwell