๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

(79)
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 12. ์‹ค์ „ํ”„๋กœ์ ํŠธ(5) - ์‹ค๋กœํฐ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹ค์Šต - ์†์ „๋“ฑ ์ฃผ์š”๊ตฌ์„ฑ - ๊ฐ€๋กœํ™”๋ฉด์œผ๋กœ ๊ณ ์ •๋œ ํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ์— ๋„, ๋ ˆ, ๋ฏธ, ํŒŒ, ์†”, ๋ผ, ์‹œ, ๋„ ์ŒํŒ์ด ์žˆ์Œ - ์ŒํŒ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์Œ์ด ์žฌ์ƒ๋จ - ์ŒํŒ์€ ํ…์ŠคํŠธ ๋ทฐ ์†์„ฑ์„ ์ˆ˜์ •ํ•˜๊ณ , ์†Œ๋ฆฌ๋Š” SoundPool ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์ƒํ•จ - SoundPool์€ ์•ˆ๋“œ๋กœ์ด๋“œ 5.0๋ถ€ํ„ฐ ์‚ฌ์šฉ๋ฒ•์ด ๋‹ฌ๋ผ์ง - ๊ตฌ ๋ฒ„์ „๊ณผ ์‹  ๋ฒ„์ „๊ธฐ๊ธฐ์—์„œ ๋ชจ๋‘ ์ž˜ ๋™์ž‘ํ•˜๋„๋ก ๋ฒ„์ „ ๋ถ„๊ธฐ๋ฅผ ์ ์šฉํ•จ 1. ๋ ˆ์ด์•„์›ƒ ์ž‘์„ฑ ๊ฐ€๋กœ ๋ชจ๋“œ๋กœ ๊ณ ์ •ํ•˜๊ธฐ ๋ฐฉ๋ฒ•1) MainActivity.kt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { // ํ™”๋ฉด์ด ๊ฐ€๋กœ ๋ชจ๋“œ๋กœ ๊ณ ์ •๋˜๊ฒŒ ํ•˜๊ธฐ ์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ• //requestedOr..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 11. ์‹ค์ „ํ”„๋กœ์ ํŠธ(4) - ์†์ „๋“ฑ / + ์„œ๋น„์Šค ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹ค์Šต - ์†์ „๋“ฑ ์ฃผ์š”๊ตฌ์„ฑ - ์†์ „๋“ฑ ์•ฑ์„ ์•ฑ๊ณผ ์œ„์ ฏ์œผ๋กœ ๊ตฌ์„ฑ - ์•ฑ๊ณผ ์œ„์ ฏ ๋ชจ๋‘ ์†์ „๋“ฑ์„ ์ผœ๊ณ  ๋„๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์„ ์ œ๊ณตํ•˜๊ณ  ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์„œ๋น„์Šค์—์„œ ์ˆ˜ํ–‰ โ€ป ์†์ „๋“ฑ ๊ธฐ๋Šฅ์€ ๊ฐ€์ƒ๊ธฐ๊ธฐ๋กœ ๋ถˆ๊ฐ€! ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์™€ ํœด๋Œ€ํฐ ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ• https://curryyou.tistory.com/375 1. ์†์ „๋“ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์†์ „๋“ฑ ๊ธฐ๋Šฅ์„ Torch ํด๋ž˜์Šค ์ž‘์„ฑ - ์†์ „๋“ฑ ๊ธฐ๋Šฅ์„ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•ด์„œ Torch ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ์ž‘์„ฑ โ‘  ํ”„๋กœ์ ํŠธ ์ฐฝ์˜ ํŒจํ‚ค์ง€๋ช…์—์„œ ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ์„ ํ•˜์—ฌ New → Kotlin File/Class๋ฅผ ํด๋ฆญํ•˜๋ฉด ํŒŒ์ผ ์ข…๋ฅ˜์™€ ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•˜๋Š” ํ™”๋ฉด์ด ํ‘œ์‹œ โ‘ก ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ Torch๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์ข…๋ฅ˜๋Š” Class๋ฅผ ์„ ํƒํ•˜์—ฌ OK๋ฅผ ํด๋ฆญ โ‘  ์ด ํด๋ž˜์Šค๋Š” ํ”Œ๋ž˜์‹œ๋ฅผ ์ผœ๋Š” flashOn( ) ..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 10. ์‹ค์ „ํ”„๋กœ์ ํŠธ(3) - ์ „์ž์•ก์ž ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹ค์Šต - ์ „์ž ์•ก์ž ์ฃผ์š”๊ตฌ์„ฑ - ํ”„๋ž˜๊ทธ๋จผํŠธ๋ผ๋Š” UI ์กฐ๊ฐ์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ํ”„๋ž˜๊ทธ๋จผํŠธ๋“ค์„ ์ขŒ์šฐ๋กœ ์Šฌ๋ผ์ด๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ทฐํŽ˜์ด์ €ViewPager๋ฅผ ์‚ฌ์šฉ - ์‚ฌ์ง„์ด๋ฏธ์ง€ ๋กœ๋”ฉ์— Glide ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ - timer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์Šฌ๋ผ์ด๋“œ ๋˜๊ฒŒ ํ•จ 1. ํ”„๋กœ๋ฐ”์ด๋” ์‚ฌ์šฉ ์ฝ˜ํ…์ธ  ํ”„๋กœ๋ฐ”์ด๋” - ์•ฑ์˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ๋‹ค๋ฅธ ์•ฑ์— ํ—ˆ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ - ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์ง„ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋Š” ์ˆœ์„œ โ‘  ์‚ฌ์ง„ ๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€ ์ €์žฅ์†Œ์— ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์™ธ๋ถ€ ์ €์žฅ์†Œ ์ฝ๊ธฐ ๊ถŒํ•œ์„ ์•ฑ์— ๋ถ€์—ฌ โ‘ก ์™ธ๋ถ€ ์ €์žฅ์†Œ ์ฝ๊ธฐ ๊ถŒํ•œ์€ ์œ„ํ—˜ ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ ์ค‘์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ํ—ˆ์šฉํ•˜๋„๋ก ํ•จ โ‘ข contentResolver ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ Cursor ๊ฐ์ฒด๋กœ ๊ฐ€์ง€๊ณ  ์˜ด ์•ˆ๋“œ๋กœ์ด๋“œ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ - ์•กํ‹ฐ๋น„ํ‹ฐ: ํ™”๋ฉด..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 9. ์‹ค์ „ํ”„๋กœ์ ํŠธ(2) - ์Šคํ†ฑ์›Œ์น˜ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹ค์Šต - ์Šคํ†ฑ ์›Œ์น˜ ์ฃผ์š”๊ตฌ์„ฑ - ๋น ๋ฅด๊ฒŒ ๊ณ„์‚ฐํ•˜๋ฉด์„œ UI๋ฅผ ๊ฐฑ์‹  - ๊ฐ๊ฐtimer์™€ runOnUiThread ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ - ๋žฉํƒ€์ž„์„ ๋ˆ„์ ํ•˜์—ฌ ํ‘œ์‹œํ•  ScrollView์— ๋™์ ์œผ๋กœ TextView๋ฅผ ์ถ”๊ฐ€ 1. ํ™”๋ฉด๊ตฌ์„ฑ - ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋Š” TextView 2๊ฐœ - ํƒ€์ด๋จธ๋ฅผ ์‹œ์ž‘ ๋ฐ ์ผ์‹œ์ •์ง€, ์ดˆ๊ธฐํ™”ํ•˜๋Š” FloatingActionButton (๋ฒกํ„ฐ ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€ 3๊ฐœ ์ถ”๊ฐ€) - tint๋กœ ์ƒ‰์ƒ ๋ฐ”๊พธ๊ธฐ → xml ์ฝ”๋“œ์—์„œ app:tint="@color/white"์ถ”๊ฐ€ - FloatingActionButton ์ถ”๊ฐ€์‹œ No speakable text present๋ผ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ activity_main.xml์—์„œ FloatingActionButtom ์†์„ฑ์— tools:ign..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 8. ์‹ค์ „ํ”„๋กœ์ ํŠธ(1) - ๋น„๋งŒ๋„๊ณ„์‚ฐ๊ธฐ ์‹ค์ „ ํ”„๋กœ์ ํŠธ ์‹ค์Šต - ๋น„๋งŒ๋„ ๊ณ„์‚ฐ๊ธฐ ์ฃผ์š”๊ตฌ์„ฑ - ๋ชธ๋ฌด๊ฒŒ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ™”๋ฉด๊ณผ ๋น„๋งŒ๋„ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํ™”๋ฉด์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ๋‘ ๊ฐœ ํ•„์š”ํ•จ - ์ธํ…ํŠธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์„œ ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ ์ „๋‹ฌํ•จ - ConstraintLayout ๊ธฐ๋ฐ˜ 1. res > values > color.xml - ์•ก์…˜๋ฐ” ์ƒ‰์ƒ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์ปฌ๋Ÿฌ ์ฝ”๋“œ ์ถ”๊ฐ€ - 16์ง„์ˆ˜๋กœ #FF000000 #FFFFFFFF #FF018786 #00584A 2. res > values > themes > themes.xml - 3. activity_main.xml design๋ชจ๋“œ์—์„œ ์œ„์ ฏ ์ถ”๊ฐ€ - EditText 2๊ฐœ, Button 1๊ฐœ 4. activity_result.xml design๋ชจ๋“œ์—์„œ ์œ„์ ฏ ์ถ”๊ฐ€ - File > New > Activity > E..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 7. ์œ„์ ฏ - ํ…์ŠคํŠธ๋ทฐ/์—๋””ํŠธํ…์ŠคํŠธ,๋ฒ„ํŠผ/์ปดํŒŒ์šด๋“œ๋ฒ„ํŠผ/์ด๋ฏธ์ง€๋ฒ„ํŠผ ๋“ค์–ด๊ฐ€๊ธฐ ์ „.. [์ฐธ๊ณ ] XML ์—˜๋ฆฌ๋จผํŠธ - root element๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ child element๋ฅผ ๊ฐ€์ง - ๊ฐ child element๋„ ํ•˜๋‚˜ ์ด์ƒ์˜ subchild element๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ ๋ฐ์ดํ„ฐ - ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ์—˜๋ฆฌ๋จผํŠธ๋Š” empty element๋ผ๊ณ  ํ•˜๋ฉฐ, ๋˜๋Š” ๋กœ ํ‘œํ˜„ํ•จ - ์—˜๋ฆฌ๋จผํŠธ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†์„ฑ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ ์†์„ฑ์€ ์†์„ฑ๋ช…๊ณผ ์†์„ฑ๊ฐ’์œผ๋กœ ํ‘œํ˜„ ์ฃผ์„๋ฌธ - xml๋ฌธ์„œ์˜ ์ฃผ์„๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•จ ์œ„์ ฏ ํ…์ŠคํŠธ๋ทฐ - View ํด๋ž˜์Šค ๋ฐ”๋กœ ๋‹ค์Œ์— ์œ„์น˜ํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ์œ„์ ฏ์ด ๊ทธ ํ•˜์œ„์— ์กด์žฌํ•จ text ์†์„ฑ - ํ…์ŠคํŠธ๋ทฐ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ - “๋ฌธ์ž์—ด” ํ˜•์‹์œผ๋กœ ๊ฐ’์„ ์ง์ ‘ ์ž…๋ ฅํ•˜๊ฑฐ๋‚˜ “@string/๋ณ€์ˆ˜๋ช…” ํ˜•์‹์œผ๋กœ ์ง€์ •ํ•œ ํ›„ strings.xml ํŒŒ์ผ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ tex..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 6. ๋ ˆ์ด์•„์›ƒ(3) - ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ/์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(์ฒด์ด๋‹, ๊ฐ€์ด๋“œ๋ผ์ธ)/+ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ํ™œ์šฉํ•˜๊ธฐ(์ž๋™์ €์žฅ, ์ฝ”๋“œ์ž๋™์™„์„ฑ, ๋””๋ฒ„๊น…) ๋ ˆ์ด์•„์›ƒ ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ(GridLayout) - ๊ฒฉ์ž(grid) ๋‚ด๋ถ€์˜ ์…€์— ์ž์‹ ๋ทฐ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๋ทฐ ๊ทธ๋ฃน - ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์ž์‹ ๋ทฐ๊ฐ€ ์ž์‹ ์˜ ์œ„์น˜์™€ ์ฐจ์ง€ํ•˜๋Š” ์…€์˜ ๊ฐœ์ˆ˜๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ ์ž์ฒด์— ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ - rowCount: ํ–‰์˜ ์ˆ˜ - columnCount: ์—ด์˜ ์ˆ˜ - orientation: ๊ทธ๋ฆฌ๋“œ๋ฅผ ์ˆ˜ํ‰ ๋ฐฉํ–ฅ์œผ๋กœ ์šฐ์„ ํ•  ๊ฒƒ์ธ์ง€, ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ์šฐ์„ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ • ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ์•ˆ์— ํฌํ•จ๋œ ์œ„์ ฏ์— ์„ค์ •ํ•˜๋Š” ์†์„ฑ - layout_row: ์ž์‹ ์ด ์œ„์น˜ํ•  ํ–‰ ๋ฒˆํ˜ธ(0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘) - layout_column: ์ž์‹ ์ด ์œ„์น˜ํ•  ์—ด ๋ฒˆํ˜ธ(0๋ฒˆ๋ถ€ํ„ฐ ์‹œ์ž‘) - layout_rowSpan: ํ–‰์„ ์ง€์ •๋œ ์ˆ˜๋งŒํผ ํ™•์žฅํ•จ - layout_columnSpan: ์—ด์„ ์ง€์ •๋œ ์ˆ˜๋งŒํผ ..
[์•ˆ๋“œ๋กœ์ด๋“œ ์ฝ”ํ‹€๋ฆฐ] 5. ๋ ˆ์ด์•„์›ƒ(2) - ๋ฆฌ๋‹ˆ์–ด ๋ ˆ์ด์•„์›ƒ/๋ ๋Ÿฌํ‹ฐ๋ธŒ ๋ ˆ์ด์•„์›ƒ/ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ ๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ - ๋ ˆ์ด์•„์›ƒ ์•ˆ์— ์กด์žฌํ•˜๋Š” ์œ„์ ฏ์„ ๋ฐฐ์น˜ํ•˜๊ฒŒ ํ•ด์คŒ - ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋ฉด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” activity_main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง - ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ์€ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋ฆฌ์†Œ์Šค๋กœ ๋ถ„๋ฅ˜๋จ - ํŒŒ์ผ๋ช…์€ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑ๋จ - ํŒŒ์ผ ์ด๋ฆ„ ๋์— ํŒŒ์ผ์˜ ํƒ€์ž…์ธ XML์„ ๋ถ™์—ฌ์„œ activity_main.xml์ด ๋จ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ 1) ๋ฆฌ๋‹ˆ์–ด ๋ ˆ์ด์•„์›ƒ(์„ ํ˜•, LinearLayout) 2) ๋ ๋Ÿฌํ‹ฐ๋ธŒ ๋ ˆ์ด์•„์›ƒ(์ƒ๋Œ€, RelativeLayout) 3) ํ…Œ์ด๋ธ” ๋ ˆ์ด์•„์›ƒ(TableLayout) 4) ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ(GridLayout) 5) ํ”„๋ ˆ์ž„ ๋ ˆ์ด์•„์›ƒ(FrameLayout) 6) ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(์ œ์•ฝ, ConstraintLayout..