728x90
Jetpack Compose를 활용해 검색어 입력에 따라 리스트가 동적으로 필터링되는 기능을 구현해보겠습니다.
1. Search Filter Example
사용자에게 입력 받은 search Text 를 미리 구성해놓은 텍스트 목록인 all Items 와 동적으로 비교하여 (filtered Items)
일치하는 목록을 필터링해, LazyColumn 리스트에 보여줍니다
@Composable
fun SearchFilterExample() {
var searchText by remember { mutableStateOf("") }
val allItems = listOf("Apple", "Banana", "Orange", "Grapes", "Blueberry", "Strawberry", "Pineapple")
val filteredItems = allItems.filter { it.contains(searchText, ignoreCase = true) }
Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
SearchBar(
searchText = searchText,
onSearchTextChanged = { searchText = it }
)
Spacer(modifier = Modifier.height(16.dp))
LazyColumn(verticalArrangement = Arrangement.spacedBy(8.dp)) {
items(filteredItems) { item ->
FilteredItemCard(itemName = item)
}
}
}
}
2. 검색어 입력창(SearchBar)과 아이템 카드(FilteredItemCard) UI 구성 카드
@Composable
fun SearchBar(searchText: String, onSearchTextChanged: (String) -> Unit) {
BasicTextField(
value = searchText,
onValueChange = { onSearchTextChanged(it) },
singleLine = true,
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Search,
keyboardType = KeyboardType.Text
),
textStyle = TextStyle(
fontSize = 16.sp,
fontWeight = FontWeight.Normal
),
decorationBox = { innerTextField ->
Box(
modifier = Modifier
.fillMaxWidth()
.height(50.dp)
.padding(8.dp)
.background(MaterialTheme.colorScheme.surface, MaterialTheme.shapes.small)
.padding(horizontal = 16.dp),
contentAlignment = Alignment.CenterStart
) {
if (searchText.isEmpty()) {
Text(text = "Search...", color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.5f))
}
innerTextField()
}
}
)
}
@Composable
fun FilteredItemCard(itemName: String) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp),
colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.primary)
) {
Box(modifier = Modifier.padding(16.dp), contentAlignment = Alignment.CenterStart) {
Text(text = itemName, fontSize = 16.sp, color = MaterialTheme.colorScheme.onPrimary)
}
}
}
입력 중인 텍스트를 기반으로 리스트를 동적으로 필터링하는 기능을 간단하게 구현해보았습니다. 이 기능은 쇼핑 앱, 연락처 앱, 파일 탐색기 등 다양한 앱에서 활용될 수 있습니다. 나아가, 조건별 필터링이나 클릭 이벤트를 추가해 상세 화면으로 이동하는 기능으로 확장할 수도 있습니다
시연 영상입니다
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] Jetpack Compose로 아이템 Drag & Drop 구현하기 (0) | 2024.12.15 |
---|---|
[Kotlin][Android] 슬라이더와 애니메이션을 활용한 RGB 색상 조합기 만들기 (4) | 2024.12.09 |
[Kotlin][Android] Jetpack Compose를 이용한 부드러운 막대 그래프 애니메이션 구현하기 (0) | 2024.12.03 |
[Kotlin][Android] Jetpack Compose 텍스트 작성 중인 상태에 대해 사용자에게 알리기 (0) | 2024.11.27 |
[Kotlin][Android] 문자열 형식 체크하기 (0) | 2024.11.23 |