๐Ÿ’Ž์•ˆ๋“œ๋กœ์ด๋“œ

0.๋‹จ์ถ•ํ‚ค ๋ฐ ์šฉ์–ด์ •๋ฆฌ

์ž๋ฐ”ํŒŒ์ผ์•ˆ์— ์žˆ๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ฆญ ํ›„ Ctrl + insert๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ชฉ๋ก์ด ๋‚˜์˜จ๋‹ค.

ํŒจํ‚ค์ง€๋ฅผ ํด๋ฆญํ•˜๊ณ  ctrl + alt + insert ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ƒ์„ฑ๊ฐ€๋Šฅํ•œ ๋ชฐ๋ก์ด ๋‚˜์˜จ๋‹ค.

Shift+f10 : Run app

๊ฐ€์ƒ ๋””๋ฐ”์ด์Šค๋Š” ๋ถ€ํŒ…์‹œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ๊ณ„์† ์ผœ๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Ctrl+Space : ์ฝ”๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์™„์„ฑ์‹œ์ผœ์คŒ

Alt+Space: ์˜ค๋ฅ˜๊ฐ€ ๋œจ๋Š” ๊ณณ์— ๋งˆ์šฐ์Šค ์ปค์„œ๋ฅผ ๋Œ€๊ณ  ๋ˆ„๋ฅด๋ฉด ์˜ค๋ฅ˜ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํžŒํŠธ ์ œ๊ณต

Alt+Enter: ์˜ค๋ฅ˜๋ฅผ ์ž๋™์œผ๋กœ ๊ณ ์ณ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ฃผ๋กœ importํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค. (ํ€ตํ”ฝ์Šค)

Ctrl+Tab: ์Šค์œ„์ฒ˜๊ธฐ๋Šฅ์œผ๋กœ ์œˆ๋„์šฐ์˜ ํ™”๋ฉด ์ „ํ™˜์ด๋ž‘ ๋น„์Šท

Ctrl+B : ์„ ์–ธ๋ถ€ ๋ณด๊ธฐ

Alt+Ctrl+i: ์ค„ ๊ฐ„๊ฒฉ ๋งž์ถ”๊ธฐ

๋””๋ฒ„๊น…์€ ๋นจ๊ฐ„์ (์ค‘๋‹จ์ ) ์ƒ์„ฑ ํ›„ ๋””๋ฒ„๊ทธ ๋ฒ„ํŠผ (Shift+F9) ์‹คํ–‰

F7: ํ˜„์žฌ ๋ฉˆ์ถ˜ ๋ผ์ธ์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ ์†์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๋‹จ์ถ•ํ‚ค์ž…๋‹ˆ๋‹ค.

F9: ๋‹ค์Œ ์ค‘๋‹จ์ ์„ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Shift+F8: ํ˜„์žฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๋น ์ ธ๋‚˜๊ฐˆ๋•Œ๊นŒ์ง€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

F8: ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋”ฑ ํ•œ ์ค„๋งŒ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Alt+F9: ์ปค์„œ๊ฐ€ ์žˆ๋Š” ๊ณณ๊นŒ์ง€ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์šฉ์–ด์ •๋ฆฌ

์•ˆ๋“œ๋กœ์ด๋“œ SDK: ์•ˆ๋“œ๋กœ์ด๋“œ Software Development Kit

์•ˆ๋“œ๋กœ์ด๋“œ API: ์•ˆ๋“œ๋กœ์ด๋“œ Application Programming Interface

1.Gradle

ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋œ ํŒŒ์ผ๊ณผ ๊ทธ์— ์—ฐ๊ด€๋œ ๋ชจ๋“ˆ๋“ค์„ ๋งํฌํ•˜์—ฌ ์•ฑ์„ ์ปดํŒŒ์ผํ•˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ์— ํฌํ•จ๋œ ๋ชจ๋“ˆ์ด ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€๋ ๋•Œ๋งˆ๋‹ค Gradle์— ์˜ํ•œ sync๊ณผ์ •์ด ๋ฐœ์ƒํ•œ๋‹ค

manifests : ์•ฑ์— ๋Œ€ํ•œ ์„ค์ •ํŒŒ์ผ

java: ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ์ž๋ฐ”๋‚˜ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ ํฌํ•จ, ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๊ฐ€ ์ž๋™์ƒ์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ

res: ์•ฑ์— ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋“ค์„ ํฌํ•จํ•œ๋‹ค.

Gradle Scripts : ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด Gradle์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ํŒŒ์ผ๋“ค์„ ๋งํ•œ๋‹ค.

2.Activity

์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ Ul๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ œ์ผ ํฐ ๋‹จ์œ„์ด๋‹ค.

Activity๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ API ๋‚ด์—์„œ ํด๋ž˜์Šค๋กœ ์ œ๊ณต๋˜์–ด ์ด๋ฅผ ์ƒ์†๋ฐ›์•„ ์•ฑ์—์„œ ์‚ฌ์šฉํ•  Activity๋ฅผ ์‚ฌ์šฉํ•จ.

๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์‹œ์Šคํ…œ์— ์˜ํ•ด ์ƒ์„ฑ๋˜์–ด ๋กœ๋“œ๋˜๊ฑฐ๋‚˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์‹œ์ž‘ํ•˜๋Š”

Start Activity ํ•จ์ˆ˜์— ์˜ํ•ด '๊ฐ„์ ‘์ '์œผ๋กœ ๋„์šธ ์ˆ˜ ์žˆ๋‹ค.

Activity์˜ ์‹œ์ž‘๊ณผ ์ข…๋ฃŒ๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์ด ์ง์ ‘ ๊ด€๋ฆฌํ•˜๋Š” ํ•˜๋Š” ๊ณผ์ •์„ Activity Lifecycle ์ด๋ผ๊ณ  ํ•œ๋‹ค.

image-20200708224328516

Activity๊ฐ€ ์‹ค์ œ๋กœ ํ™”๋ฉด์— ๋ณด์ด๊ธฐ ์ „๊นŒ์ง€ onCreate() , onStart(), onResume() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

onCreate()๋Š” activity ์ƒ์„ฑ์‹œ ๋‹จ ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ๋˜๊ธฐ ๋–„๋ฌธ์— ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™”๋‚˜

ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” UI์˜ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์„ ํ•œ๋‹ค.

onStart(), onResume()์€ ์ฒ˜์Œ ์‹œ์ž‘ํ• ๋•Œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Activity๊ฐ€ ๊ฐ€๋ ค์กŒ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์˜ฌ๋•Œ ์‹คํ–‰๋œ๋‹ค.

ํ™”๋ฉด์˜ ์ผ๋ถ€๊ฐ€ ๊ฐ€๋ ค์ง€๋Š” ๊ฒฝ์šฐ -> ์ผ์‹œ์ •์ง€๊ฐ€ ๋˜์–ด onPause() ๊ฐ€ ๋˜๊ณ 

๋‹ค๋ฅธ Activity๋กœ ์™„์ „ํžˆ ์ „ํ™˜๋˜๋Š” ๊ฒฝ์šฐ-> onPause()์ด ๋จผ์ € ๋ถˆ๋ฆฌ๊ณ  onStop() ์ด ๋œ๋‹ค.

๋”ฐ๋ผ์„œ onStart(), onResume() ์€ ๋‹ค๋ฅธ ํ™”๋ฉด์—์„œ ์ž…๋ ฅ๋ฐ›์€ ๋‚ด์šฉ์„ ํ†ตํ•ด ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ • ๋˜๋Š” ๊ฐฑ์‹ ์„ ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

onPause(), onStop()์˜ ๊ฒฝ์šฐ์—๋Š” ์‹œ์Šคํ…œ์ด ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๋ฐฐํ„ฐ๋ฆฌ์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ Activity๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์‹œ Activity๋ฅผ ํ•˜๊ฒŒ๋˜๋„ onCreate() ๋ถ€ํ„ฐ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ Activity๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด Activity.finish()๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜

์‹œ์Šคํ…œ์— ์˜ํ•ด ๊ฐ•์ œ์ ์œผ๋กœ Activity๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ onDestroy()๋ฅผ ์‚ฌ์šฉ ํ•˜๊ฒŒ ๋œ๋‹ค.

3.๊ธฐ๋ณธ ๊ฐœ๋…

launch Activity๋Š” ์ฒ˜์Œ ํ™”๋ฉด์œผ๋กœ ๋œจ๋Š” Activity๋กœ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

image-20200708221258340

AppCompatActivity()๋ผ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ๊ฐ€ ์ œ๊ณตํ•˜๋Š” Activity ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ๋งŒ๋“ค์–ด ์ง„๊ฒƒ์ด๋‹ค. oncreate() ํ•จ์ˆ˜ ์•ˆ์—๋Š” super.onCreate(savedInstanceState) ์Šˆํผ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์žฌํ˜ธ์ถœ ํ•˜๋Š” ๊ตฌ๋ฌธ๊ณผ setContentView(R.layout.activity_main) ๋ ˆ์ด์•„์›ƒ xml๋ฅผ ๋ถˆ๋Ÿฌ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ตฌ๋ฌธ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.

์•ฑ์ด ๋™์ž‘๋˜๋Š” ๋™์•ˆ์— ๋ฐ”๋€Œ๋Š” ์†์„ฑ์ด๋‚˜ ํด๋ฆญ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์€ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๋กœ ์ž‘์„ฑ.

4.view

Activity์— View๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” oncreate()ํ•จ์ˆ˜ ์•ˆ์—์„œ setContentView() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ

ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋ฆฌ์†Œ์Šค ID๋‚˜ ์ฝ”๋“œ์—์„œ ์ง์ ‘ ์ƒ์„ฑํ•œ view()๊ฐ์ฒด๋ฅผ ๋„˜๊ฒจ ์ฃผ๋ฉด ๋œ๋‹ค.

view๋ฅผ ์„ค์ •ํ•œ๋‹ค๊ณ  ํ•ด์„œ ๋ฐ”๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

Activity LifeStyle์— ์˜ํ•ด ์ดˆ๊ธฐํ™”๋‚˜ ๋ณต๊ท€๊ฐ€ ์™„์ „ํžˆ ๋๋‚œ ์‹œ์ ์ด๊ฑฐ๋‚˜

ํ„ฐ์น˜๋‚˜ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๋“ฑ์œผ๋กœ ์ธํ•ด view์˜ ๋‚ด์šฉ์ด ๋ฐ”๋€Œ์–ด์•ผ ํ•˜๋Š” ์‹œ์ ์—

View System์—์„œ View ํด๋ž˜์Šค์˜ on Draw ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ™”๋ฉด์— View์˜ ๋‚ด์šฉ์„ ํ˜ธ์ถœํ•˜์—ฌ

image-20200708223351765

ํ™”๋ฉด์— View์˜ ๋‚ด์šฉ์„ ์ƒˆ๋กœ ํ‘œ์‹œํ•ด ์ค€๋‹ค.

VIew์˜ ์šฉ์–ด ์ค‘์— ๊ฐ ํ•ด๋‹นํ•˜๋Š” ์šฉ์–ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ์ด๋‹ค.

image-20200708232700765

View๊ฐ€ ์†ํ•ด์žˆ๋Š” ์ƒ์œ„ View๋ฅผ (parent) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

image-20200708233024771

ํ”Œ๋Ÿฌ์Šค๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์•„๋ฌด๋Ÿฐ ์ œ์•ฝ์ด ์—†๋‹ค๋Š” ๋œป์ด๋‹ค.

image-20200708233159762

End๋ถ€๋ถ„์ด ์ œ์•ฝ์ด ๊ฑธ๋ฆฐ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

image-20200708233334989

wrap_content๋Š” ๋‚ด์šฉ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ VIew์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ์กฐ์ ˆ๋˜๋Š” ์†์„ฑ๊ฐ’์ด๋‹ค.

viewํด๋ž˜์Šค๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒ์†๋ฐ›์•„ ์›ํ•˜๋Š” View์˜ ํ˜•ํƒœ๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ ํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ๋Š”

์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ํŒŒ์ƒ๋œView๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

ImageView : ์ด๋ฏธ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” view๋กœ ImageButton ๋“ฑ์œผ๋กœ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค.

Drawable์ด๋ผ๋Š” ๋ฆฌ์†Œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.(Drawable: ํ™”๋ฉด์— ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฆฌ์†Œ์Šค )

ex) PNG,JPG,GIF,WebP -> BitmapDrawable ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

src ์†์„ฑ: ํ‘œ์‹œํ•  Drawable์„ ์ง€์ • ImageView.setImageResource(Drawable์˜ ID)

scaleType ์†์„ฑ: ImageView์˜ ์˜์—ญ๋‚ด์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์Šค์ผ€์ผํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค์ •ํ•œ๋‹ค.

center

image-20200709155657984

centerCrop

์ด๋ฏธ์ง€์˜ ์‚ฌ์ง„์˜ ์ค‘์‹ฌ์œผ๋กœ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ณ  ๊ธดํŽธ์€ ์ž˜๋ผ๋‚ด๋Š” ํ˜•์‹

image-20200709155747962

centerInside

์ด๋ฏธ์ง€์˜ ๊ธด๋ณ€์— ๋งž์ถฐ ์‚ฌ์ง„์„ ์Šค์ผ€์ผ๋ง ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ฐฐ๊ฒฝ์œผ๋กœ ์ฑ„์šด๋“ฏ

image-20200709155843347

fitCenter

์ด๋ฏธ์ง€์˜ ๋น„์œจ๋กœ ์Šค์ผ€์ผ๋ง ํ•˜๋˜ ๊ธด๋ณ€์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๋ฐฐ๊ฒฝ์œผ๋กœ ์‚ฌ์šฉ

image-20200709155954338

fitStart

fitcenter๊ฐ€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šค์ผ€์ผ๋ง ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

image-20200709160024671

fitEnd

fitcenter๊ฐ€ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šค์ผ€์ผ๋ง ์šฐ์ธก ํ•˜๋‹จ ์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

image-20200709160045501

fitXY

์ด๋ฏธ์ง€ ๋ทฐ์˜ ํฌ๊ธฐ์— ๋งž์ถฐ ๋น„์œจ์— ์ƒ๊ด€์—†์ด ์ด๋ฏธ์ง€๋ฅผ ์Šค์ผ€์ผ๋ง ํ•œ๋‹ค.

image-20200709160117740

matrix

์‚ฌ์šฉ์ž๊ฐ€ ์ €์žฅํ•œ matrix์— ๋”ฐ๋ผ ํ‘œ์‹œ

image-20200709160201020

์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ๋•Œ๋Š” ํด๋” ์ด๋ฆ„์„

image-20200709160323561

drawable-xxhdpi ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

TextView : ๋‹จ์ˆœํžˆ Text๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ view๋ฅผ ํŒŒ์ƒํ•˜๊ณ  ์žˆ๋‹ค.

EditText: ํŽธ์ง‘์ด ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ๋ฐ•์Šค

Button : ํ…์ŠคํŠธ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๋ฒ„ํŠผ

RadioButton : ๊ทธ๋ฃน ์ค‘ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•˜๋Š” ๋ฒ„ํŠผ

Switch : ์Šค์œ„์น˜ ๋ชจ์–‘์œผ๋กœ on/off ๋ฅผ ํ•˜๋Š” ๋ฒ„ํŠผ

image-20200708223756109

viewGroup :

LinearLayout : ๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ๋กœ ์ˆœ์„œ๋Œ€๋กœ View๋ฅผ ๋‚˜์—ด

image-20200708223856715

ConstraintLayout: ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ View๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๋‚˜์—ด

image-20200708223926035

๊ฐ•๋ ฅํ•œ ์ด์œ ๋Š” ํฌํ•จ๋œ View๊ฐ„์—๋„ ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฑธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

image-20200708233656889

ReCyclerLayout : ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ์ŠคํŠธ๋‚˜ ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ

image-20200708223947422

๋‹ค์–‘ํ•œ ํฌ๋งท์˜ ๋ชฉ๋ก์œผ๋กœ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ

๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๋ชฉ๋ก์— ํ‘œ์‹œํ•˜๋Š” adapater , ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ์•„์ดํ…œ์˜ View๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š”

ViewHolder๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

Spinner: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๋Š” View

image-20200708224009460

ScrollView : ๋‚ด๋ถ€์˜ vIew๋ฅผ ์Šคํฌ๋กค ํ• ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” View

TabLayout : ํ…์„ ์ด์šฉํ•ด View ๊ฐ„์— ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” View

image-20200708224053000

CheckBox ์™€ RadioButton

CheckBox ์™€ RadioButton ์˜ ์ฐจ์ด์ ์€ CheckBox ๋Š” ์ค‘๋ณตํˆฌํ‘œ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ

RadioButton์€ ํ•œ๊ฐ€์ง€ ์„ ํƒ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

TextView.setTypeface(Typedface,Int) ๋Š” ๊ธ€๊ผด์ด๋‚˜ ์Šคํƒ€์ผ์„ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜๋กœ

Typeface :ํฐํŠธ์˜ ํ˜•ํƒœ , Int๋Š” ๊ธ€๊ผด์˜ ์Šคํƒ€์ผ์„ ์„ค์ •

image-20200710221753529

์ฒดํฌ๋ฐ•์Šค ๋ณ€ํ™”๋ฅผ ๊ฐ์‹œํ•˜๋Š” ํ•จ์ˆ˜ onCheckedChanged ์— ๊ธฐ๋ณธ ํฌ๋งท ํ˜•์‹์€ R.id.Viewid๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

5.layout

๋ ˆ์ด์•„์›ƒ ํฌ๊ธฐ์˜ ๋‹จ์œ„์ธ DP(density-independent pixels) ์˜ ์ค„์ž„๋ง๋กœ ์ผ๋ฐ˜์ ์ธ ํ”ฝ์…€์€ ๋””์Šคํ”Œ๋ ˆ์ด์˜

๋ฌผ๋ฆฌ์ ์ธ ๋„ํŠธ ํ•˜๋‚˜์— ํ”ฝ์…€์ด ํ•˜๋‚˜์”ฉ ๋งค์นญ๋˜๋Š” ๊ฐœ๋…์ด์ง€๋งŒ dpํ•˜๋‚˜๋Š” ๋ฌผ๋ฆฌ์ ์ธ ๋„ํŠธ๋ณด๋‹ค ๋” ํด์ˆ˜๋„ ,์ž‘์„์ˆ˜๋„ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์–ด๋–ค ํ™”๋ฉด์—์„œ๋„ ๋น„์Šทํ•œ ํฌ๊ธฐ์˜ UI๋ฅผ ์ œ๊ณตํ•˜๋Š” DP๋ผ๋Š” ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

DP๋Š” ๋””์Šคํ”Œ๋ ˆ์ด ํ•ด์ƒ๋„ 160dpi ๋ฅผ ๊ธฐ์ค€์œผ๋กœ 1ํ”ฝ์…€=1dp ๋งค์นญํ•œ ํฌ๊ธฐ๋กœ ๋””์Šคํ”Œ๋ ˆ์ด์˜ ํ•ด์ƒ๋„ ๋†’์•„์งˆ์ˆ˜๋ก

DP์™€ ๋งค์นญ๋˜๋Š” ๋ฉด์ ์ด ์ปค์ง€๋„๋ก ์•Œ์•„์„œ UI๋ฅผ ์Šค์ผ€์ผ๋ง ํ•ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

SP(scale-independent pixels) ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” DP์™€ ๊ฐ™์ด ๋ฐ€๋„์— ๋…๋ฆฝ์ ์ธ ํ”ฝ์…€์ด์ง€๋งŒ ๊ธ€๊ผด์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์œ„์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ…์ŠคํŠธ์˜ ์ ‘๊ทผ์„ฑ์ด ์ค‘์š”ํ•œ ์•ฑ์ด๋ผ๋ฉด ๊ธ€๊ผด์— Sp๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

6.Spinner

spinner๋Š” ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ComboBox๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—์„œ ๊ฐ€์ ธ์˜จ ๋ฐ์ดํ„ฐ ๋ชฉ๋ก์„ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ 

์‚ฌ์šฉ์ž์˜ ์„ ํƒ์„ ๋ฐ›๋Š” ui์ด๋‹ค.

๋ชฉ๋ก์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘spinner์— ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”

Spinner Adapter๋ฅผ ์‚ฌ์šฉ

Spinner Adaper๋Š” ๋ฐ์ดํ„ฐ์˜ ์ „์ฒด ๋ชฉ๋ก ์ค‘์—์„œ ํ™”๋ฉด์— ํ‘œ์‹œํ•  ๋ชฉ๋ก์˜ View๋ฅผ Spinner์— ์ œ๊ณตํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Spinner Adaper๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ถ€๋ถ„์ด ์ง์ ‘ ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ

Spinner Adaper๋ฅผ ์ƒ์†๋ฐ›์•„ ๋ฐฐ์—ด์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋„๋ก ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋‹ค.

ArrayAdapter์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ์ค‘ ๋ฐฐ์—ด์„ ๋ฐ›์•„ ํ‘œ์‹œํ•˜๋Š” ์ƒ์„ฑ์ž๋Š”

์ฒซ๋ฒˆ์งธ ํŒจ๋Ÿฌ๋ฏธํ„ฐ๋กœ๋Š” Context: view์—์„œ ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค๋กœ Activity๊ฐ€ ์ด๋ฅผ ์ƒ์†๋ฐ›์•„

๋งŒ๋“ค์–ด์ ธ ์žˆ์œผ๋‹ˆ this ๋กœ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค.

๋‘๋ฒˆ์จฐ ํŒจ๋Ÿฌ๋ฏธํ„ฐ๋กœ๋Š” Spinner ์˜ ๋ฆฌ์ŠคํŠธ์— ๊ฐ๊ฐ์˜ ํ•ญ๋ชฉ์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๋ถ„ ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค.

์„ธ๋ฒˆ์งธ ํŒจ๋Ÿฌ๋ฏธํ„ฐ๋Š” ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

AdapterView๋Š” Adapter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  VIew๊ฐ€ ์ƒ์†๋ฐ›๋Š” Spinner์˜ ์ƒ์œ„ ํด๋ž˜์Šค์ด๋‹ค.

์ž๋™์™„์„ฑ์œผ๋กœ override ๋ฅผ ํ•ด๋ณด์‹œ๋ฉด ๋‘๊ฐ€์ง€ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

onItemSelected ๋Š” ํ•ญ๋ชฉ์ด ์„ ํƒ๋˜์—ˆ์„๋•Œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

onItemSelected ์—๋Š” ์ด 4๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด์˜ค๋Š”๋ฐ

์ฒ˜์Œ์€ ์Šคํ”ผ๋„ˆ ์ž์‹ , ๋‘๋ฒˆ์งธ๋Š” ์„ ํƒ๋œ ํ•ญ๋ชฉ์˜ ๋ทฐ , ์„ธ๋ฒˆ์จฐ ์„ ํƒ๋œ ์œ„์น˜, ๋„ค๋ฒˆ์งธ๋Š” ํ•ญ๋ชฉ์˜ id์ด๋‹ค.

onNothingSelected๋Š” ์•„๋ฌด ํ•ญ๋ชฉ๋„ ์„ ํƒ๋˜์ง€ ์•Š์•˜์„๋•Œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

image-20200710225455595

ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ž์—ด๊ณผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋ฉด Model Class๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Model Class

์—ฐ๊ด€์„ฑ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ๋ฌถ์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ

์—ฐ๊ด€๋˜๋Š” ์†์„ฑ๋“ค์„ ํ•จ๊ป˜๋ฐ›์•„ ์ธ์Šคํ„ด์Šคํ™” ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ์†๋ฐ›๋Š” Any์˜ ์ตœ์ƒ์œ„ ํด๋ž˜์Šค์— .toString() ์ถœ๋ ฅ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

spinner์˜ ๋ชฉ๋ก์„ ์ „๋ถ€๋‹ค ๋ฐ”๊ฟ€๋•Œ์—๋Š” spinner๊ฐ€ ๋ฐ›์€ ๋ฐฐ์—ด์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์„ ๋ชปํ•˜๊ณ  ์ƒˆ๋กœ์šด spinner๋ฅผ

์—ฐ๊ฒฐํ•ด์•ผํ•œ๋‹ค. ํ˜น์€ ๋ชฉ๋ก์„ ์ถ”๊ฐ€๋‚˜ ์‚ญ์ œ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฐฐ์—ด์„ listOf() ๊ฐ€ ์•„๋‹Œ mutableListOf()๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 

List๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  apapter๊ฐ€ ์ฆ‰์‹œ ํ™”๋ฉด์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—

adapter.notifyDataSetChanged()๋ฅผ ๋ณ„๋„๋กœ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

7.์˜ค๋ฅ˜ํ•ด๊ฒฐ ๋ฐ ์ถ”๊ฐ€์ง€์‹

context๋Š” ๋ฒ„ํŠผ์ด๋ฉด ๋ฒ„ํŠผ์ด ํฌํ•จ๋˜์–ด์žˆ๋Š” ์ฃผ๋ณ€์ •๋ณด(์–ด๋–ค ๋ ˆ์ด์•„์›ƒ์— ํฌํ•จ๋˜์–ด์žˆ๋Š”๊ฐ€ )๋ฅผ ๋งํ•จ u.i๊ฐ์ฒด๋Š” ๋ฌด์กฐ๊ฑด context ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฒŒ ๋˜์–ด์žˆ์Œ getApplicationContext()๋Š” ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต context๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋งค์†Œ๋“œ์ด๋‹ค.

์ฝ”ํ‹€๋ฆฐ์—์„œ ์ž๋ฐ”์˜ static final ์ฒ˜๋Ÿผ ์“ฐ๋ ค๊ณ  ํ•˜๋ฉด @jvmField๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

kotlin-korea/Study-Log#10

ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ sharedPreference๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);

๋ฐ”๋กœ ๋ฐ›์•„ ์˜ค์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— this.activity๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์˜ด

๋ทฐํŽ˜์ด์ € ์ƒ๋ช…์ฃผ๊ธฐ ๋ฐ ๋ทฐํŽ˜์ด์ €์˜ ์ •๋ณด

deprecated ๋œ ์ž๋ฃŒ๋Š” ๋งŽ์ง€๋งŒ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€

https://itpangpang.xyz/category/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C%28android%29/ViewPager

๋ทฐํŽ˜์ด์ €์—์„œ ํ™”๋ฉด์— ๋น„์ถฐ์กŒ์„๋•Œ ์‚ฌ์šฉํ•˜๋Š” FragmentStatePagerAdapter

๋Š” Deprecated๋˜์–ด ์ถ”ํ›„์— ๋ฐฉ๋ฒ•

https://kimyounghoons.github.io/android/android-FragmentStatePagerAdapter/

Cannot fit requested classes in a single dex file ์˜ค๋ฅ˜ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

image-20200812214129584

Dependency failing: com.google.android.gms:play-services-measurement-api:17.0.0 -> com.google.android.gms:play-services- measurement-sdk-api@[17.0.0], but play-services-measurement-sdk-api version was 17.1.0. ์˜ค๋ฅ˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

https://happydev.kr/25

->์—…๋ฐ์ดํŠธ๊ฐ€ ์ค€๋น„๋œ ๋…น์ƒ‰๋ฐฐ๊ฒฝ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•ด์ฃผ๊ธฐ

์ด์ „์— ์‹ค์ˆ˜๋กœ apk๋ฅผ ๋“ฑ๋กํ–ˆ๋‹ค๋ฉด

image-20200813172418235

๋ฅผ ํ†ตํ•ด ๋ฒ„์ ผ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

๋˜ํ•œ admob์„ ํ†ตํ•ด ์—…๋กœ๋“œ ํ• ๋•Œ Failed :0 ๋น„์Šทํ•œ ์ฝ”๋“œ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ ๋””๋ฒจ๋กœํผ์— ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ํ•˜์˜€๋‹ค๋ฉด

์—๋“œ๋ชน๊ณผ ์•ฑ ์—ฐ๊ฒฐ, ํ˜น์€ ์• ๋“œ๋ชน๊ณผ ํŒŒ์ด์–ด๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ณ  ๋‹ค์‹œํ•œ๋ฒˆ ์ƒ˜ํ”Œ ID์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๊ทธ๋ž˜๋“ค ๋ฒ„์ ผ ํ™•์ธ ํ•  ๊ฒƒ.

8.๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ ViewHolder์—์„œ ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ , onBindeViewHolder์—์„œ ๋„ฃ๊ธฐ

ViewHolder

image-20200812170423344

onBIndeViewHolder

image-20200812170449895