CPS251 Android Development by Scott Shaper

Compose Elements Reference

This reference covers the most commonly used Compose elements and modifiers. For complete documentation, refer to the official Android Compose documentation.

Layout Elements

Box

A container that stacks its children on top of each other


Box(
    modifier = Modifier
    .size(100.dp)
    .background( 
        Color(0xFF673AB7), 
        shape = androidx.compose.foundation.shape.RoundedCornerShape(24.dp)
    )
) {
    Text("Overlay text")
}
        

Row

Arranges children horizontally in a row


Row(
    modifier = Modifier.fillMaxWidth(),
    horizontalArrangement = Arrangement.SpaceEvenly
) {
    Text("Left")
    Text("Center")
    Text("Right")
}
        

LazyRow

Scrollable horizontal list that only composes visible items


LazyRow {
    items(items) { item ->
        Card(
            modifier = Modifier.padding(8.dp)
        ) {
            Text(item.name)
        }
    }
}
        

Column

Arranges children vertically in a column


Column(
    modifier = Modifier.fillMaxHeight(),
    verticalArrangement = Arrangement.Center
) {
    Text("Top")
    Text("Middle")
    Text("Bottom")
}
        

LazyColumn

Scrollable vertical list that only composes visible items


LazyColumn {
    items(items) { item ->
        ListItem(
            headlineContent = { Text(item.title) },
            supportingContent = { Text(item.description) }
        )
    }
}
        

Spacer

Creates empty space between elements


Column {
    Text("Top text")
    Spacer(modifier = Modifier.height(16.dp))
    Text("Bottom text")
}
        

UI Elements

Text

Displays text with various styling options


Text(
    text = "Hello World",
    fontSize = 18.sp,
    fontWeight = FontWeight.Bold,
    color = Color.Blue
)
        

Button

Clickable button with customizable content


Button(
    onClick = { /* handle click */ },
    modifier = Modifier.padding(8.dp)
) {
    Text("Click Me")
}
        

TextField

Single-line text input field


var text by remember { mutableStateOf("") }
TextField(
    value = text,
    onValueChange = { text = it },
    label = { Text("Enter text") },
    modifier = Modifier.fillMaxWidth()
)
        

OutlinedTextField

Text field with an outlined border


OutlinedTextField(
    value = text,
    onValueChange = { text = it },
    label = { Text("Username") },
    leadingIcon = { Icon(Icons.Default.Person, "Person") }
)
        

Image

Displays an image from resources or network


Image(
    painter = painterResource(id = R.drawable.my_image),
    contentDescription = "My image",
    modifier = Modifier.size(100.dp),
    contentScale = ContentScale.Crop
)
        

Alternative with background color:


Box(
    modifier = Modifier
        .size(100.dp)
        .background(Color.Blue)
)
        

Card

Material Design card with elevation and rounded corners


Card(
    modifier = Modifier.padding(8.dp),
    elevation = CardDefaults.cardElevation(defaultElevation = 4.dp)
) {
    Column(modifier = Modifier.padding(16.dp)) {
        Text("Card Title", fontWeight = FontWeight.Bold)
        Text("Card content goes here")
    }
}
        

Icon

Displays a vector icon


Icon(
    imageVector = Icons.Default.Favorite,
    contentDescription = "Favorite",
    tint = Color.Red,
    modifier = Modifier.size(24.dp)
)
        

Switch

Toggle switch for boolean values


var checked by remember { mutableStateOf(false) }
Switch(
    checked = checked,
    onCheckedChange = { checked = it },
    modifier = Modifier.padding(8.dp)
)
        

Checkbox

Checkbox for boolean selection


var checked by remember { mutableStateOf(false) }
Checkbox(
    checked = checked,
    onCheckedChange = { checked = it }
)
        

RadioButton

Radio button for single selection from a group


var selectedOption by remember { mutableStateOf("") }
Column {
    RadioButton(
        selected = selectedOption == "option1",
        onClick = { selectedOption = "option1" }
    )
    Text("Option 1")
}
        

Common Modifiers

fillMaxSize()

Fills the maximum available space


Box(
    modifier = Modifier.fillMaxSize()
) {
    // Content
}
        

fillMaxWidth()

Fills the maximum available width


Text(
    text = "Full width text",
    modifier = Modifier.fillMaxWidth()
)
        

fillMaxHeight()

Fills the maximum available height


Column(
    modifier = Modifier.fillMaxHeight()
) {
    // Content
}
        

size(width, height)

Sets specific width and height


Box(
    modifier = Modifier.size(100.dp, 50.dp)
) {
    // Content
}
        

padding(all)

Adds padding on all sides


Text(
    text = "Padded text",
    modifier = Modifier.padding(16.dp)
)
        

padding(horizontal, vertical)

Adds padding with different horizontal and vertical values


Button(
    onClick = { },
    modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)
) {
    Text("Button")
}
        

background(color)

Sets background color


Box(
    modifier = Modifier
        .size(100.dp)
        .background(Color.Blue)
) {
    Text("Blue background", color = Color.White)
}
        

border(width, color)

Adds a border around the element


Box(
    modifier = Modifier
        .size(100.dp)
        .border(2.dp, Color.Black)
) {
    // Content
}
        

clickable { }

Makes the element clickable


Text(
    text = "Clickable text",
    modifier = Modifier.clickable {
        // Handle click
    }
)
        

weight(factor)

Distributes space proportionally in Row/Column


Row {
    Text(
        text = "Takes 1/3",
        modifier = Modifier.weight(1f)
    )
    Text(
        text = "Takes 2/3",
        modifier = Modifier.weight(2f)
    )
}
        

offset(x, y)

Moves the element by specified offset


Box(
    modifier = Modifier.offset(x = 10.dp, y = 5.dp)
) {
    Text("Offset text")
}
        

alpha(value)

Sets transparency (0.0 = transparent, 1.0 = opaque)


Text(
    text = "Semi-transparent",
    modifier = Modifier.alpha(0.5f)
)
        

scale(scaleX, scaleY)

Scales the element by specified factors


Text(
    text = "Scaled text",
    modifier = Modifier.scale(scaleX = 1.5f, scaleY = 1.5f)
)
        

rotate(degrees)

Rotates the element by specified degrees


Text(
    text = "Rotated text",
    modifier = Modifier.rotate(45f)
)
        

Arrangement Options

Arrangement.Start

Aligns items to the start


Row(
    horizontalArrangement = Arrangement.Start
) {
    Text("Item 1")
    Text("Item 2")
}
        

Arrangement.Center

Centers items


Row(
    horizontalArrangement = Arrangement.Center
) {
    Text("Item 1")
    Text("Item 2")
}
        

Arrangement.End

Aligns items to the end


Row(
    horizontalArrangement = Arrangement.End
) {
    Text("Item 1")
    Text("Item 2")
}
        

Arrangement.SpaceEvenly

Distributes space evenly between items


Row(
    horizontalArrangement = Arrangement.SpaceEvenly
) {
    Text("Item 1")
    Text("Item 2")
    Text("Item 3")
}
        

Arrangement.SpaceBetween

Puts space between items, none at edges


Row(
    horizontalArrangement = Arrangement.SpaceBetween
) {
    Text("Item 1")
    Text("Item 2")
    Text("Item 3")
}
        

Arrangement.SpaceAround

Puts space around items


Row(
    horizontalArrangement = Arrangement.SpaceAround
) {
    Text("Item 1")
    Text("Item 2")
    Text("Item 3")
}
        

Alignment Options

Alignment.TopStart

Aligns to top-left corner


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.TopStart
) {
    Text("Top-left aligned")
}
        

Alignment.TopCenter

Aligns to top-center


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.TopCenter
) {
    Text("Top-center aligned")
}
        

Alignment.TopEnd

Aligns to top-right corner


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.TopEnd
) {
    Text("Top-right aligned")
}
        

Alignment.Center

Centers the content


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.Center
) {
    Text("Centered")
}
        

Alignment.BottomStart

Aligns to bottom-left corner


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.BottomStart
) {
    Text("Bottom-left aligned")
}
        

Alignment.BottomCenter

Aligns to bottom-center


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.BottomCenter
) {
    Text("Bottom-center aligned")
}
        

Alignment.BottomEnd

Aligns to bottom-right corner


Box(
    modifier = Modifier.fillMaxSize(),
    contentAlignment = Alignment.BottomEnd
) {
    Text("Bottom-right aligned")
}