일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 면접
- Livedata
- 일렉트론
- Navigation Component
- Gradle
- 스플래시
- TypeConverter
- hilt
- fragment
- kotlin
- android studio
- Datastore
- 주석
- Android
- room
- nav_graph
- Safe Args
- imageview
- BottomNavigationView
- themes.xml
- electron
- 안드로이드
- 테마
- 개발자
- recyclerview
- 취업
- Jetpack Compose
- ViewModel
- asLiveData()
- Binding Adapter
- Today
- Total
목록Android (34)
나만 보는 일기장
Room 지속성 라이브러리는 SQLite에 추상화 계층을 제공하여 SQLite를 완벽히 활용하면서 더 견고한 데이터베이스 액세스를 가능하게 합니다. 오늘은 Hilt와 ViewModel 등의 여러 라이브러리를 통해 Room을 사용하는 법을 알아보도록 하겠습니다. Room의 구조 Room을 사용할 때 만들어 주어야 하는 것은 크게 1. DB에 들어가는 테이블의 구조인 Entity, 2. DB의 데이터에 접근할 수 있는 함수를 정의해 놓은 DAO, 3. DB 그 자체인 Database 3가지 입니다. 1. Entity @Entity(tableName = Constants.TABLE_NAME) class TeamBookmarkEntity( var favoriteTeam: TeamData ) { @PrimaryK..
android:background="?attr/selectableItemBackground" // 혹은 android:background="?attr/selectableItemBackgroundBorderless" // + android:clickable="true" 위 속성들을 넣어주면 됩니다. selectableItemBackground와 selectableItemBackgroundBorderless의 차이는 아래와 같습니다. selectableItemBackground는 View의 바운더리 내에서, selectableItemBackgroundBorderless는 View의 크기에 상관 없이 터치 이펙트를 보여줍니다. 터치 효과의 색상 같은 속성의 커스마이즈를 위해서는 아래 링크를 참고하시길 바랍니다..
여러분은 드래그&드롭을 통해 아이템 간 위치를 바꾸거나 아이템을 스와이프 해 삭제하는 등의 액션을 구현하는 것을 보신 적이 있을 것입니다. 이러한 액션들을 구현하기 위해서는 ItemTouchHelper의 콜백 클래스를 구현하면 됩니다. Callback 클래스와 SimpleCallback 클래스는 드래그나 스와이프를 인식할 방향을 어디서 설정하느냐의 차이입니다. class SwipeHelperCallback(private val mAdapter: MyAdapter): ItemTouchHelper.Callback() { // 입력을 감지할 방향 설정, 설정하지 않으려면 0 override fun getMovementFlags( recyclerView: RecyclerView, viewHolder: Recyc..
오늘은 위와 같이 스타일과 포맷을 동시에 가진 TextView를 만들어 보겠습니다. 여기서 우리가 원하는 것은 하나의 텍스트뷰로 Html 스타일과 가변적으로 값을 넣을 수 있는 포맷을 동시에 구현하는 것입니다. Founded: %1$d Country: %1$s Venue: %1$s 이를 위해 먼저 strings.xml에 위와 같이 문자열 리소스를 만들어 보았습니다. 이렇게 적어주면 태그로 둘러쌓인 곳은 볼드 처리가 되고, %1$d로 표시 된 부분에 문자열 값을 넣어주면 잘 들어갈 것 같아 보입니다. with(response) { textName.text = team.name textVenue.text = getString(R.string.venue, venue.name) textCountry.text =..
@Singleton @Provides fun provideHeaderInterceptor(): Interceptor = Interceptor { chain -> chain.run { proceed( request() .newBuilder() .addHeader("x-rapidapi-host", API_HOST) .addHeader("x-rapidapi-key", API_KEY) .build() ) } } 를 통해 모든 요청에 특정한 헤더 등을 추가할 수 있습니다.
Xml 기반 레이아웃 작업에서의 ListView와 RecyclerView처럼 Compose에서는 for문을 통한 수동적인 리스트와 LazyComlumn(이나 LazyRow)를 이용한 리스트가 있습니다. 둘의 차이점 또한 똑같습니다. ListView와 수동 리스트가 리스트의 아이템 전체를 로드해 화면에 보이지 않는 부분은 자원이 낭비되고, RecyclerView와 LazyColumn은 화면 밖을 벗어난 아이템을 재활용해 효율적이라는 점입니다. @Composable fun MainScreen(userProfiles: List) { Scaffold(topBar = { AppBar() }) { Surface( modifier = Modifier.fillMaxSize() ) { Column { for(userPr..