[Android TIL] 240228
๋ฐ˜์‘ํ˜•

 

 

 

 

~ Today I Learned ~

 

โœ”๏ธ Git ํŠน๊ฐ• ์ˆ˜๊ฐ• - Git & Github ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ๊ธฐ๋ณธ ๋ช…๋ น์–ด
โœ”๏ธ Android ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜ 2์ฃผ์ฐจ - ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ ์ œ์ž‘

 

<๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ>

 

๋กœ๋˜๋ฒˆํ˜ธ์ƒ์„ฑ๊ธฐ.apk
7.91MB

 


 

 

 

1. Git ํŠน๊ฐ• ์ˆ˜๊ฐ• - Git & Github ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

 

 

 

[Git ํŠน๊ฐ•] 1. Git & Github ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ๊ธฐ๋ณธ ๋ช…๋ น์–ด

1. ํ•„์ˆ˜ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด (git ๋ช…๋ น์–ด ์•„๋‹˜) ์•ฑํŠธ๋ž™์€ vscode ํ„ฐ๋ฏธ๋„ ๋Œ€์‹ , ํ„ฐ๋ฏธ๋„(๋งฅOS), git bash(์œˆ๋„์šฐ)๋กœ ์ง„ํ–‰ 1. pwd (print working directory) ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ํด๋”๋ฅผ ๋ณด์—ฌ๋‹ฌ๋ผ๋Š” ๋œป ์ฐธ๊ณ : ~ ๋Š” ํ™ˆ(Home)์ด

limheejin.tistory.com

 

  • ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด pwd, ls, ls -a, cd, mkdir, touch
  • Git๊ณผ Github์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ์ด์œ 
  • ๊นƒ ๋ช…๋ น์–ด (git init, git add, git commit -m, git status, git log, git clone, git pull)์™€ conflict

์— ๋Œ€ํ•ด ๋ฐฐ์› ๋‹ค. ๋‹ค์Œ ์‹œ๊ฐ„์—” git branch, git switch, git checkout, git merge, git stash์™€ ํ˜‘์—…์— ๋Œ€ํ•ด ๋ฐฐ์šด๋‹ค.



 

 

2.  Android ๊ฐœ๋ฐœ ์ข…ํ•ฉ๋ฐ˜ 2์ฃผ์ฐจ - ๋กœ๋˜ ๋ฒˆํ˜ธ ์ƒ์„ฑ๊ธฐ ์ œ์ž‘

 

 

 

๐Ÿ”จ MainActivity ์„ค๊ณ„

 

  • onCreate ์œ„์—์„œ๋Š” ๋ฒ„ํŠผ๊ณผ ๋„˜๋ฒ„ํ”ผ์ปค, ํ…์ŠคํŠธ๋ทฐ ๋“ฑ์„ id๋กœ ์ฐพ์•„ val๋กœ ์—ฐ๊ฒฐ, didRun๊ณผ pickNumberSet ์„ ์–ธ
    didRun ์„ค์ • ์ด์œ : ์‹ค์ œ๋กœ ๋‚ด๊ฐ€ ์ด ๋ฒˆํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๊ณ  ์ž๋™ ์ƒ์„ฑ์„ ์‹œ์ž‘ํ•œ ๊ทธ ์ดํ›„
    6๊ฐœ๊ฐ€ ๊ฝ‰ ์ฑ„์›Œ์ง€๋ฉด ๋ฒˆํ˜ธ๋ฅผ ๋” ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ. ๊ฝ‰ ์ฑ„์›Œ์ง€๋ฉด true๋กœ ๋ฐ”๊พธ๊ณ , ํด๋ฆฌ์–ด ๋ˆ„๋ฅด๋ฉด false๋กœ ๋ฐ”๊ฟ€๊ฒƒ

  • onCreate ์•ˆ์—์„œ ์ด 3๊ฐ€์ง€์˜ ์ดˆ๊ธฐํ™”๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค.

    initRunButton()
    initAddButton()
    initClearButton()

  • (1) initClearButton() ์˜์—ญ
    ๊ธฐ์กด์˜ ๊ฐ’๋“ค์„ ๋‹ค ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
    ex) pickNumberSet ํด๋ฆฌ์–ด, numTextViewList isVisible false, didRun false

  • (2) initAddButton() ์˜์—ญ
    ๋‚ด๊ฐ€ ์„ ํƒํ•œ ๊ณต์„ ์˜ฌ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
    when์„ ํ†ตํ•ด ๊ณต์ด ์˜ฌ๋ผ๊ฐ€๋Š” ์˜ˆ์™ธ ์กฐ๊ฑด๋“ค์„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
    (1) didRun -> true ๊ฐ’์ธ ๊ฒฝ์šฐ : ๊ฝ‰ ์ฐจ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๋” ์˜ฌ๋ฆฌ๋ฉด ์•ˆ ๋จ
    (2) ๊ณ ๋ฅธ ์ˆซ์ž๋Š” ์ด 6๊ฐœ ๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅํ•จ
    (3) ์ด๋ฏธ ๊ณ ๋ฅธ ์ˆซ์ž๋Š” ๋‹ค์‹œ ๋„ฃ์ง€ ๋ชปํ•จ
    ๊ทธ ์ด์™ธ์˜ ๊ฒฝ์šฐ๋Š” else๋กœ ๊ณ ๋ฅธ ๊ณต์„ ๋„ฃ๋„๋ก ์ฒ˜๋ฆฌ (isVisible true, numTextViewList[pickNumberSet.size] ๋“ฑ)

  • (3) initRunButton() ์˜์—ญ
    ๋กœ๋˜ ๋ฒˆํ˜ธ๋ฅผ ์ž๋™ ์ƒ์„ฑ ์‹œ์ผœ์ฃผ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
    ๋‚ด๊ฐ€ ์ด๋ฏธ ๊ณ ๋ฅธ ์ˆซ์ž๊ฐ€ ์žˆ์„ ๋•Œ๋ฅผ ์œ„ํ•˜์—ฌ list์—์„œ getRandom() ๊ฐ’์„ ๊ฐ€์ ธ์˜ด
    getRandom()์—์„œ๋Š” ์ด๋ฏธ ๊ณ ๋ฅธ ๊ฐ’์„ ๋นผ๊ณ  numbers์— ๋„ฃ๊ณ , 
    ์ด๋ฏธ ๊ณ ๋ฅธ ์ˆซ์ž + numbers (6-์ด๋ฏธ ๊ณ ๋ฅธ ์ˆซ์ž ๊ฐฏ์ˆ˜) ๋งŒํผ ์ •๋ ฌํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์— ๋ฐ˜ํ™˜ 
    val numbers = (1..45).filter{ it !in pickNumberSet} 
         return (pickNumberSet + numbers.shuffled().take(6-pickNumberSet.size)).sorted()
    ๊ทธ ๋‹ค์Œ setNumBack ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ˆซ์ž์™€ ๊ณต ์ƒ‰๊น”์„ ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ  ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ

๐Ÿ’ก์ฐธ๊ณ : Linear Layout์€ Orientation์ด ํ•„์ˆ˜ (์˜ˆ: android:orientation="horizontal")

 

 

 

๐Ÿ”จ ๋ณ€ํ˜•

 

 

1. ์„ ํƒ ๊ฐœ์ˆ˜ ๋ฐ ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ์ˆ˜์ •

  • ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์ด 5๊ฐœ๋ฐ–์— ๋ชป ๊ณ ๋ฅด๋Š”๋ฐ, ์‹ค์ œ ๋กœ๋˜ ๋ฒˆํ˜ธ๋Š” 6๊ฐœ๋ผ 6๊ฐœ๋ฅผ ๋‹ค ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ initAddButton ํ•จ์ˆ˜์—์„œ๋Š” pickNumberSet.size >= 6 ์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ ,
    RunButton ํ•จ์ˆ˜์—๋„ when {pickNumberSet.size >= 6 -> showToast("์ด๋ฏธ 6๊ฐœ๋ฅผ ๋‹ค ๊ณ ๋ฅด์…จ๋„ค์š”!")} ๋ฅผ ๋„ฃ์–ด๋ดค๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ผ 6๊ฐœ๋ฅผ ๊ณ ๋ฅด๊ณ , ์ƒ์„ฑ ์‹œ์ž‘์‹œ ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

 

2. ํฐํŠธ ์ˆ˜์ •

  • ์ด์ „ BMI ๊ณ„์‚ฐ๊ธฐ์™€ ๊ฐ™์ด resource์— ttfํŒŒ์ผ์„ ๋„ฃ์–ด ํฐํŠธ๋ฅผ ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

 

3. ๋ฒ„ํŠผ ๋ฐฐ๊ฒฝ ์ˆ˜์ •

  • ๊ธฐ๋ณธ ๋ณด๋ผ์ƒ‰ ๋ฐฐ๊ฒฝ์˜ ๋ฒ„ํŠผ์ด ๋„ˆ๋ฌด ๋งˆ์Œ์— ์•ˆ๋“ค์–ด ๋ณ€๊ฒฝํ–ˆ๋‹ค.
  • android:backgroundTint="#126893" ๋ฅผ Button ์˜์—ญ ์•ˆ์— ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

 

  • res -> values -> themes ํด๋”์˜ themes.xml, themes.xml(night) ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์žˆ๋‹ค.
  • ํ•ด๋‹น ๋ถ€๋ถ„ ์ค‘ parent="Theme.MaterialComponents.DayNight.DarActionBar" ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์—์„œ
    MaterialComponents๋Š” ์ฒ˜์Œ์˜ ๋ณด๋ผ์ƒ‰์„ default ๋ฐฐ๊ฒฝ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ์— ์ˆ˜์ •ํ•  ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜์–ด์žˆ๋‹ค.
    ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด MaterialComponents๋ฅผ AppCompat์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.
  • ์ฐธ๊ณ ๋กœ xml ์ˆ˜์ •์„ ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด, Button์„ ์„ ์–ธํ•  ๋•Œ๋งˆ๋‹ค 
     <androidx.appcompat.widget.AppCompatButton .. ๋กœ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

์œ„์˜ ๋‚ด์šฉ์€ ํ˜„์žฌ ๋ฒ„์ „์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์—์„œ ๋”ฑํžˆ ์“ธ๋ชจ ์—†๋Š” ์ •๋ณด์˜€๋‹ค.

 

 

 


 

~ Trouble Shooting ~

 

 

 

1. ์ง์ ‘ ์ฝ”๋“œ๋กœ ImageView๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ์˜ ์—๋Ÿฌ

์œ„์˜ tools:context=".MainActivity" /> ๋ถ€๋ถ„์—์„œ /(์Šฌ๋ž˜์‹œ)๋ฅผ ์‚ญ์ œํ•˜๋ฉด ์ •์ƒ ์ž‘๋™ ๋จ.
๊ทธ๋ฆฌ๊ณ  ๋ฐ‘์—์„œ </ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ </androidx.constraintlayout.widget.ConstraintLayout> ๋ถ€๋ถ„ ์ž‘์„ฑ ๋จ
์™œ /๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž…๋ ฅ๋˜์–ด ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Œ


 

 

2. ๋ฉ”์ธ ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ findViewById ์ž‘์„ฑ ์ค‘ ์ƒ๊ธด ๋ฌธ์ œ

๊ณต 6๊ฐœ๋ฅผ ๋ฐฐ์น˜ํ•˜๊ธฐ ์œ„ํ•ด numTextViewList๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์•ˆ์— findViewById๋ฅผ ๋‚˜์—ดํ–ˆ๋Š”๋ฐ,
์ž‘๋™์ด ๊ณ„์† ์•ˆ๋˜๊ธธ๋ž˜ ํ™•์ธํ–ˆ๋”๋‹ˆ findViewById๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋‚˜์—ดํ•  ๋•Œ ,(์‰ผํ‘œ)๊ฐ€ ํ•„์š”ํ–ˆ์Œ

 

 

 


~ ETC ~

 

์‹œ์ž‘ํ•œ์ง€ ์–ผ๋งˆ ๋˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ ๋งค์ผ ์‹œ๊ฐ„์ด ๋ชจ์ž๋ผ๋‹ค.
๋นจ๋ฆฌ ๋ฐฐ์›Œ์„œ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ฒŒ ์‚ฐ๋”๋ฏธ๋ผ, ๋ฌธ๋ฒ•๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๋นจ๋ž‘ ๋„˜์–ด๊ฐ€๊ณ  ์‹ถ์€๋ฐ ์‰ฝ์ง€ ์•Š๋„ค. ์˜ˆ์ฐฝํŒจ ๋ฐœํ‘œ ์ค€๋น„๋„ ํ•ด์•ผํ•˜๋Š”๋ฐ!

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T