๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ’๏ธ Android/Android Studio

[Android] 16. ๋ ˆ์ด์•„์›ƒ : ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(Constraint Layout) ๊ฐœ์š” ๋ฐ ์‹ค์Šต(1), ์•กํ‹ฐ๋น„ํ‹ฐ(Activity)

by A Lim Han 2023. 1. 9.

# ๋ ˆ์ด์•„์›ƒ : ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(Constraint Layout) ๊ฐœ์š” ๋ฐ ์‹ค์Šต(1), ์•กํ‹ฐ๋น„ํ‹ฐ(Activity)

 

 

# ๋ ˆ์ด์•„์›ƒ : ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(Constraint Layout) ๊ฐœ์š” ๋ฐ ์‹ค์Šต(1)

: ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ, ํ™”๋ฉด์— ๋ฐฐ์น˜๋˜๋Š” ์œ„์ ฏ๋“ค ์‚ฌ์ด ๊ฐ„๋‹จํ•œ ์ œ์•ฝ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

-->  ์ƒ๋Œ€ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ๊นŠ์œผ๋ฉฐ, ์ฃผ์–ด์ง„ ์œ„์ ฏ์„ ํƒ€ ์œ„์ ฏ์— ์ƒ๋Œ€์ ์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.

 

 

 

- ๋ ˆ์ด์•„์›ƒ ์—๋””ํ„ฐ์˜ ๊ธฐ๋ณธ ํ™”๋ฉด

ํŒ”๋ ˆํŠธ ์ฐฝ ๋ ˆ์ด์•„์›ƒ ๋””์ž์ธ ์‹œ ํ•„์š”ํ•œ ๋ทฐ ์ œ๊ณต
์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์ฐฝ ๋ ˆ์ด์•„์›ƒ์˜ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ
UI ํŽธ์ง‘(๋””์ž์ธ) ์ฐฝ ๋ทฐ๋ฅผ ๋ฐฐ์น˜ํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์„ ์ž‘์„ฑํ•˜๋Š” ํ™”๋ฉด
์†์„ฑ ์ฐฝ ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ์ฐฝ

 

 

+ UI ํŽธ์ง‘์ฐฝ์˜ ๊ฒฝ์šฐ Design, BluePrint, Design+BluePrint 3๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์ขŒ์ธก๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ Design, BluePrint, Design+BluePrint ๋ชจ๋“œ

 

+ ์†์„ฑ ์ฐฝ์˜ ๊ฒฝ์šฐ ๋””์ž์ธ ์ฐฝ์— ๋ฐฐ์น˜๋œ ๋ทฐ๋ฅผ ํด๋ฆญํ•จ์œผ๋กœ์จ ํ‘œ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

+ ์ œ์•ฝ์ด ์„ค์ •๋œ ๋ฐฉํ–ฅ์—๋Š” 1๋ฒˆ๊ณผ ๊ฐ™์ด ์—ฌ๋ฐฑ์ด ํ‘œ์‹œ๋˜๋ฉฐ, ์ œ์•ฝ์„ ์‚ญ์ œํ•  ๋•Œ์—๋Š” ๋ทฐ์˜ 4๋ฉด์— ์žˆ๋Š” 2๋ฒˆ์„ ํด๋ฆญํ•œ๋‹ค.

-->  ๊ธธ์ด์— ๋Œ€ํ•œ ์ œ์•ฝ์€ 4๋ฉด์˜ 3๋ฒˆ์„ ํด๋ฆญํ•˜์—ฌ ์„ค์ •ํ•˜๋ฉฐ, 7๋ฒˆ๊ณผ 8๋ฒˆ์—์„œ ์›ํ•˜๋Š” ์„ค์ •์„ ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์Œ.

 

 

+ 4๋ฒˆ๊ณผ 5๋ฒˆ์€ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์˜ ์ œ์•ฝ์ด ์žˆ์„ ๊ฒฝ์šฐ์—๋งŒ ๋‚˜ํƒ€๋‚˜๋ฉฐ, ์ด๋ฅผ ์ด์šฉํ•ด ์Šฌ๋ผ์ด๋“œํ•˜์—ฌ ๋ทฐ์˜ ์œ„์น˜๋ฅผ ์ƒ๋Œ€์ ์œผ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ

-->  6๋ฒˆ ๋ทฐ์— ID๋ฅผ ์ง€์ •ํ•˜๋ฉด Kotlin ์ฝ”๋“œ์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅ

 

 

 

 

- UI ํŽธ์ง‘์ฐฝ ์ถ”๊ฐ€ ์š”์†Œ

ํ•ธ๋“ค๋Ÿฌ (Handler) ์œ„์ ฏ ์ƒ, ํ•˜, ์ขŒ, ์šฐ์— ์œ„์น˜ํ•œ 4๊ฐœ์˜ ์›
์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ (Constraint) ์œ„์ ฏ๊ณผ ํƒ€ ์œ„์ ฏ์˜ ํ•ธ๋“ค๋Ÿฌ ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ๊ณผ ์—ฐ๊ฒฐ๋œ ์„ 
์•ต์ปค ํฌ์ธํŠธ (Anchor Point) Constraint๊ฐ€ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€์œ„

 

+ ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ํŽธ์ง‘๊ธฐ์™€ ํฌ๊ธฐ ์กฐ์ ˆ ํ•ธ๋“ค๋Ÿฌ

 

 

ex) ํŽธ์ง‘์ฐฝ์„ ์ด์šฉํ•˜์—ฌ ๋ฒ„ํŠผ ์ถ”๊ฐ€ํ•˜๊ธฐ

 

 

 

- ๊ฐ€์ด๋“œ๋ผ์ธ(GuideLine)

: ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ณด์กฐ ๋„๊ตฌ๋กœ, ๊ฐ€๋กœ ๋ฐ ์„ธ๋กœ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ํ™”๋ฉด ์† ์ž„์˜์˜ ์œ„์น˜์— ๋“œ๋ž˜๊ทธํ•  ๋•Œ ๋ ˆ์ด์•„์›ƒ์— ๋ฐฐ์น˜๋˜๋Š” ์œ„์ ฏ์ด ๋Œ€ํ•ด ๊ฐ€์ƒ์˜ ์•ต์ปค ํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

ex) ๋ฒ„ํŠผ์— ๊ฐ€์ด๋“œ๋ผ์ธ ์ถ”๊ฐ€ํ•˜๊ธฐ

 

 

 

 

# ๋ ˆ์ด์•„์›ƒ : ์•กํ‹ฐ๋น„ํ‹ฐ(Activity)

: ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ปดํฌ๋„ŒํŠธ๋กœ, ์•ฑ์„ ์‹คํ–‰ํ•  ๋•Œ ๋ณด์—ฌ์ง€๋Š” ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” Android ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜

-->  App์€ 1๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

์ขŒ์ธก๋ถ€ํ„ฐ 1๋ฒˆ์งธ, 2๋ฒˆ์งธ, 3๋ฒˆ์งธ Activity

 

 

 

- ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค (Activity Class)

: Android์˜ Activity ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, Activity๋‚˜ FragmentActivity, AppCompatActivity ๋“ฑ ๋‹ค์–‘ํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค.

 

ex) ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด AppCompatActivity ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ ์‚ฌ๋ก€

class MainActivity : appCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?) {
    	super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

 

 

 

- ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ ๊ฐ„ ์ „ํ™˜๋ฒ•

: ์ฝ”๋“œ ํŒŒ์ผ์˜ ๋ ˆ์ด์•„์›ƒ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ์—ฐ๊ด€๋œ ๋ ˆ์ด์•„์›ƒ XML ํŒŒ์ผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

# ๋ ˆ์ด์•„์›ƒ : ์ปจ์ŠคํŠธ๋ ˆ์ธํŠธ ๋ ˆ์ด์•„์›ƒ(Constraint Layout) ์‹ค์Šต(1)

 

1. Text View ๋ฐฐ์น˜ํ•˜๊ธฐ

โ‘  ์ž์„ ๋ชจ์–‘์˜ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ Autoconnect ๋ชจ๋“œ๋ฅผ ์ผ ๋‹ค.

โ‘ก ํŒ”๋ ˆํŠธ ์ฐฝ์—์„œ TextView๋ฅผ ๋“œ๋ž˜๊ทธํžˆ์•ผ ์ •์ค‘์•™์— ์œ„์น˜์‹œํ‚จ๋‹ค.

ํ…์ŠคํŠธ ๋ทฐ๋ฅผ ๋ฐฐ์น˜ํ•˜๋ฉด ์ขŒ์ธก ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

 

 

 

2. ์†์„ฑ์ฐฝ์—์„œ ๋ฌธ์ž์—ด ๋‚ด์šฉ ๋ณ€๊ฒฝํ•˜๊ธฐ

๋ณ€๊ฒฝ ์ „
๋ณ€๊ฒฝ ํ›„

 

 

 

3. ์†์„ฑ์ฐฝ์—์„œ ๋ฌธ์ž์—ด ํฌ๊ธฐ ๋ณ€๊ฒฝํ•˜๊ธฐ

textAppearance ์†์„ฑ๊ฐ’์„ Large๋กœ ๋ฐ”๊พธ๊ธฐ

-->  ๊ธ€์ž ํฌ๊ธฐ๊ฐ€ ์ปค์ง„ ๊ฒƒ์„ ํ™•์ธ ๊ฐ€๋Šฅ

 

 

 

4. ๋ฌธ์ž์—ด์„ ๋ฆฌ์†Œ์Šค๋กœ ๋งŒ๋“ค๊ธฐ

โ‘  ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์ฐฝ ์† “hello” ํ…์ŠคํŠธ ๋ทฐ ์šฐ์ธก์— ๊ฒฝ๊ณ  ์•„์ด์ฝ˜ ํด๋ฆญ

 

 

โ‘ก Fix ๋ฒ„ํŠผ์„ ํด๋ฆญ  -->  ๋ฌธ์ž์—ด์„ ๋ฆฌ์†Œ์Šคํ™”ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ํ™”๋ฉด์ด ํ‘œ์‹œ๋จ

 

 

โ‘ข Resource name์— 'hello' ์ž…๋ ฅ ํ›„ OK๋ฅผ ํด๋ฆญํ•จ  -->  text ์†์„ฑ๊ฐ’์ด @string/hello๋กœ ๋ณ€๊ฒฝ

์ขŒ์ธก ์‚ฌ์ง„์— ๊ฒฝ๊ณ  ํ‘œ๊ธฐ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

โ‘ฃ ํ”„๋กœ์ ํŠธ ์ฐฝ์—์„œ res/values/strings.xml ํŒŒ์ผ ํด๋ฆญ -->  ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๋ชจ๋“  ๋ฌธ์ž์—ด ๋ฆฌ์†Œ์Šค ํ™•์ธ ๊ฐ€๋Šฅ

Line 3์— ์ถ”๊ฐ€ํ•œ ๋ฆฌ์†Œ์Šค๋ช… 'hello' ํ™•์ธ