header-img
Info :
CS/Android, Kotlin 10
[Android] BottomNavigationView Custom 1
2023.12.03
๋‚ด๊ฐ€ ์ปค์Šคํ…€ํ•ด์•ผ ๋˜๋Š” ๊ฒƒ ์ƒํƒœ์™€ ๊ด€๊ณ„ ์—†์ด ์•„์ด์ฝ˜ vector GNB background color ๊ฐ ๊ฐ„๊ฒฉ ์„ค์ • active, deactive ์ƒํƒœ์˜ ์•„์ด์ฝ˜ ์ƒ‰์ƒ ํ…์ŠคํŠธ ์ƒ‰์ƒ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ œ๊ฑฐ ์•„์ด์ฝ˜ ๋ฒกํ„ฐ ์ปค์Šคํ…€ → ๊ทธ๋ƒฅ menu ๊ด€๋ จ xml file์—์„œ ์„ค์ •ํ•ด์ฃผ๋ฉด ๋จ. GNB Background Color? // ์•ˆ์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•จ. android:background="@color/Gray_1" app:itemBackground="@color/Gray_1" ๋‘˜ ๋‹ค ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ๋จ. ์•„์ดํ…œ๋งŒ ์„ค์ •ํ•˜๋ฉด ๋นˆ ๊ณต๊ฐ„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์›์น˜ ์•Š๋Š” ์ƒ‰์ƒ์ด ๋ณด์ด๊ฒŒ ๋จ. ์•„์ด์ฝ˜ & text ์ƒ‰์ƒ ์ปค์Šคํ…€? // ์•ˆ์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•จ. app:itemIconTint="@color/selector_menu_home_color" a..
list_img
[Android] Hilt
2023.05.09
Dependency ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. A ํด๋ž˜์Šค๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด B ํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•  ๋•Œ B๋Š” A์˜ ์˜์กด ๋Œ€์ƒ์ด ๋จ. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ๋Ÿฌ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋“œ๋ ˆ์‹ฑ์ด ํ•„์š”ํ•จ. ์ƒ๋Ÿฌ๋“œ๋Š” ๋“œ๋ ˆ์‹ฑ์— ์˜์กดํ•˜๊ณ  ์žˆ์Œ. ๋”ฐ๋ผ์„œ ์ƒ๋Ÿฌ๋“œ ← ๋“œ๋ ˆ์‹ฑ ๊ด€๊ณ„๊ฐ€ ๋จ. ์—ฌ๊ธฐ์„œ ๋“œ๋ ˆ์‹ฑ์ด ์˜์กด์˜ ๋Œ€์ƒ, Dependency๊ฐ€ ๋จ. Injection ์œ„์˜ ์˜ˆ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ƒ๋Ÿฌ๋“œ ํด๋ž˜์Šค, ๋“œ๋ ˆ์‹ฑ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ ์ƒ๋Ÿฌ๋“œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋“œ๋ ˆ์‹ฑ์˜ ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•จ. ํ•˜์ง€๋งŒ ์ด ๋“œ๋ ˆ์‹ฑ ๊ฐ์ฒด๋ฅผ ์ƒ๋Ÿฌ๋“œ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€์—์„œ ๋งŒ๋“ค์–ด์„œ ๊ฑด๋„ค์ฃผ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ. ์ด๋ ‡๊ฒŒ ์™ธ๋ถ€์—์„œ ์˜์กด๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ๋Œ€์ƒ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ์˜์กด์„ฑ(Dependency)์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…(Inje..
[Android] Base Activity, Fragment
2023.04.16
๋ฐฑ์—…์šฉ๋„๋กœ ์ž‘์„ฑ import android.os.Bundle import androidx.annotation.LayoutRes import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.lifecycle.ViewModel abstract class BaseActivity(@LayoutRes val layoutRes: Int) : AppCompatActivity() { /*@LayoutRes abstract fun getLayoutRes(): Int*/ abstract val viewModel: ..
list_img
[Android] OKHttp3๋ฅผ ์‚ฌ์šฉํ•œ ํ—ค๋” ์ถ”๊ฐ€, Retrofit2๋ฅผ ์‚ฌ์šฉํ•œ http ํ†ต์‹ 
2023.04.16
OKHttp3, Retrofit2 square์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ. http ํด๋ผ์ด์–ธํŠธ๋กœ ์‰ฝ๊ฒŒ request, response๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ. Retrofit ํŠน์ง• ์„ฑ๋Šฅ์ด ์ข‹์Œ. (Volley, AsyncTask์— ๋น„ํ•ด) annotation์„ ์‚ฌ์šฉํ•ด HTTP ์ž‘์—…์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋“ค์ด ํ–‰์œ„๋ฅผ ์†์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ์Œ. (๊ฐ€๋…์„ฑ ๐Ÿ‘) ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ(JSON)๋ฅผ ์ž๋™์œผ๋กœ ํŒŒ์‹ฑํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•จ. ์บ์‹ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ image loading์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์—ฌ glide์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ. OKHttp3 - ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„์€ ํด๋ผ์ด์–ธํŠธ์—์„œ request๋ฅผ ๋‚ ๋ฆด ๋•Œ ํ—ค๋”๋ฅผ ๋„ฃ์–ด์ฃผ๋„๋ก ๋งŒ๋“ค์—ˆ์Œ. // header ์ถ”๊ฐ€ private val ok..
[Android] Custom View
2023.04.15
๋ฉด์ ‘๊ธฐ๋ก์šฉ Custom View ์ •๋ฆฌ ์ปค์Šคํ…€ ๋ทฐ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์  ์™„์ „ ๋งž์ถค ๋ Œ๋”๋ง ๋œ ๋ทฐ ์œ ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ๊ธฐ์กด view ๊ตฌ์„ฑ์š”์†Œ ๊ทธ๋ฃน์„ ์ƒˆ๋กœ์šด ๋‹จ์ผ ๊ตฌ์„ฑ์š”์†Œ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ ํ‚ค ๋ˆ„๋ฆ„๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋งž์ถค ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• attrs.xml ์ •์˜ : ์ปค์Šคํ…€ ๋ทฐ์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์†์„ฑ์ด ์žˆ๋‹ค๋ฉด attrs.xml์— ์ •์˜ํ•ด์คŒ res > values ํด๋”์— attrs.xml ์„ ์ƒ์„ฑ declare-styleable ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ ํ›„ name์—๋Š” ์ปค์Šคํ…€๋ทฐ ํด๋ž˜์Šค๋ช…์„ ์ž…๋ ฅ attr ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ด์„œ name์—๋Š” ์†์„ฑ๋ช…, format์—๋Š” ์†์„ฑ์˜ type์„ ์ž…๋ ฅํ•ด์คŒ // ์˜ˆ์‹œ ์ปค์Šคํ…€ ๋ทฐ ํด๋ž˜์Šค ์ƒ์„ฑ View ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑ, ์ด๋•Œ์˜ ํด๋ž˜์Šค๋ช…์€ ์œ„ attrs..
[Android] Data Binding
2023.04.15
๋ฉด์ ‘๊ธฐ๋ก์šฉ Data Binding ์ •๋ฆฌ Data Binding์€ xml ํŒŒ์ผ์— data๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์œผ๋กœ MVVM ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ๋•Œ LiveData์™€ ํ•จ๊ป˜ ๊ฑฐ์˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋จ. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ ์žฅ์ ์€ ๊ธ€๋ฃจ ์ฝ”๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ. ๋ ˆ์ด์•„์›ƒ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋“ค์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ถ€๋ถ„ // ... // ... ์ „์ฒด๋ฅผ ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ฃผ๊ณ  ํƒœ๊ทธ ์‚ฌ์ด์— ํƒœ๊ทธ๋กœ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์คŒ. ๋‚˜๋Š” viewmodel์„ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ด์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์คŒ. class MainActivity : BaseActivity(R.layout.activity_main) { override val viewModel by viewModels..