Created
January 5, 2025 11:14
-
-
Save Substractive/3c45b2a4d5e021a09dc2b84d4efb3a26 to your computer and use it in GitHub Desktop.
Android Compose practice
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.uipractice.basic_layout | |
import androidx.compose.foundation.background | |
import androidx.compose.foundation.layout.Arrangement | |
import androidx.compose.foundation.layout.Column | |
import androidx.compose.foundation.layout.ExperimentalLayoutApi | |
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.size | |
import androidx.compose.foundation.layout.width | |
import androidx.compose.foundation.lazy.LazyColumn | |
import androidx.compose.foundation.shape.RoundedCornerShape | |
import androidx.compose.material.icons.Icons | |
import androidx.compose.material.icons.filled.CheckCircle | |
import androidx.compose.material.icons.filled.Settings | |
import androidx.compose.material3.Icon | |
import androidx.compose.material3.IconButton | |
import androidx.compose.material3.Text | |
import androidx.compose.runtime.Composable | |
import androidx.compose.ui.Alignment | |
import androidx.compose.ui.Modifier | |
import androidx.compose.ui.draw.clip | |
import androidx.compose.ui.graphics.Color | |
import androidx.compose.ui.text.font.FontWeight | |
import androidx.compose.ui.text.style.TextAlign | |
import androidx.compose.ui.text.style.TextOverflow | |
import androidx.compose.ui.tooling.preview.Preview | |
import androidx.compose.ui.unit.dp | |
import androidx.compose.ui.unit.sp | |
import com.example.uipractice.ui.theme.UiPracticeTheme | |
data class NotificationItem( | |
val title: String, | |
val text: String, | |
val date: String | |
) | |
@OptIn(ExperimentalLayoutApi::class) | |
@Composable | |
fun NotificationBoxHomework(notificationItem: NotificationItem, modifier: Modifier = Modifier){ | |
LazyColumn( | |
modifier = Modifier | |
.fillMaxSize() | |
.background(Color.White) | |
.padding(16.dp), | |
horizontalAlignment = Alignment.CenterHorizontally, | |
verticalArrangement = Arrangement.spacedBy(12.dp) | |
) { | |
item{ | |
NotificationCard(notificationItem) | |
} | |
} | |
} | |
@Composable | |
fun NotificationCard(notificationItem: NotificationItem, modifier: Modifier = Modifier){ | |
Column( | |
modifier = modifier | |
.clip(RoundedCornerShape(5.dp)) // must come before background! | |
.background(Color.Red) | |
.padding(5.dp) | |
) { | |
Row( | |
verticalAlignment = Alignment.CenterVertically, | |
horizontalArrangement = Arrangement.spacedBy(12.dp), | |
modifier = Modifier | |
.padding(2.dp) | |
){ | |
Icon( | |
imageVector = Icons.Default.CheckCircle, | |
contentDescription = null, | |
tint = Color.White, | |
modifier = Modifier | |
.size(10.dp) | |
) | |
Row( | |
verticalAlignment = Alignment.CenterVertically, | |
horizontalArrangement = Arrangement.SpaceBetween | |
){ | |
Text( | |
text = notificationItem.title, | |
fontSize = 10.sp, | |
fontWeight = FontWeight.Bold, | |
color = Color.White, | |
maxLines = 2, | |
overflow = TextOverflow.Ellipsis, | |
modifier = Modifier | |
.weight(1f) | |
) | |
IconButton( | |
onClick = {}, | |
modifier = Modifier | |
.width(10.dp) | |
.height(10.dp) | |
) { | |
Icon( | |
imageVector = Icons.Default.Settings, | |
contentDescription = null, | |
tint = Color.White, | |
modifier = Modifier | |
.size(10.dp) | |
) | |
} | |
} | |
} | |
Text( | |
text = notificationItem.text, | |
color = Color.White, | |
fontSize = 8.sp, | |
lineHeight = 10.sp, | |
modifier = Modifier | |
.padding(start = 28.dp, end = 5.dp) | |
) | |
Text( | |
text = notificationItem.date, | |
color = Color.White, | |
fontSize = 8.sp, | |
textAlign = TextAlign.End, | |
modifier = Modifier | |
.align(Alignment.End) | |
.padding(end = 5.dp) | |
) | |
} | |
} | |
@Preview | |
@Composable | |
private fun NotificationBoxHomeworkPreview(){ | |
UiPracticeTheme { | |
// Short version | |
/* NotificationBoxHomework( | |
notificationItem = NotificationItem( | |
title = "My notification", | |
text = "This is sample text", | |
date = "Jan 5, 11:45" | |
) | |
)*/ | |
// Long version | |
NotificationBoxHomework( | |
notificationItem = NotificationItem( | |
title = "My notification", | |
text = """ | |
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed et est tellus. Donec placerat sodales arcu. Quisque malesuada iaculis est. Sed vestibulum enim est, eu venenatis eros egestas rhoncus. Praesent nec quam ipsum. Phasellus venenatis placerat enim, nec rhoncus nunc pretium quis. In id tincidunt purus. Donec pretium, magna hendrerit feugiat suscipit, nibh sem efficitur arcu, quis tempus mi felis id diam. Quisque tempor enim a est tempus, eget interdum eros ultricies. Aliquam fringilla rutrum sapien ut elementum. Sed consectetur justo lorem, sit amet hendrerit tortor tincidunt sed. Nulla dolor ligula, lobortis ut dapibus id, varius eu massa. Nullam ut pharetra dolor, id feugiat nisi. Suspendisse a lorem neque. Proin et sapien eu tortor venenatis tincidunt et et orci. Aliquam erat volutpat. | |
""".trimIndent(), | |
date = "Jan 5, 11:45" | |
) | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment