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

Android::Layout

by ๋„์บ๋ฆฌ๐Ÿฑ 2020. 7. 2.
๋ฐ˜์‘ํ˜•

1) Layout(๋ ˆ์ด์•„์›ƒ) ์ด๋ž€

๋ ˆ์ด์•„์›ƒ์€ ์•ฑ์—์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ๊ตฌ์กฐ ( ์˜ˆ: Activity)๋ฅผ ์ •์˜ํ•œ๋‹ค.

๋ ˆ์ด์•„์›ƒ์˜ ๋ชจ๋“  ์š”์†Œ๋Š” View์™€ ViewGroup ๊ฐ์ฒด์˜ ๊ณ„์ธต์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋œ๋‹ค.

 

View๋Š” (์ผ๋ฐ˜์ ์œผ๋กœ) ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ  ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ทธ๋ฆฐ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ View ๊ฐ์ฒด๋Š” '์œ„์ ฏ'์ด๋ผ๊ณ  ํ•˜๊ณ , ์—ฌ๋Ÿฌ ํ•˜์œ„ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ๋กœ Button, Textview๊ฐ€ ์žˆ๋‹ค. 

ViewGroup์€ View์™€ ๋‹ค๋ฅธ ViewGroup๊ฐ์ฒด์˜ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํˆฌ๋ช… ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. Viewgroup๊ฐ์ฒด๋Š” ๋Œ€๊ฒŒ '๋ ˆ์ด์•„์›ƒ'์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , ๋‹ค์–‘ํ•œ ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ๋กœ LinearLayout, ConstraintLayout์ด ์žˆ๋‹ค.


2) Layout ํด๋ž˜์Šค ์‚ฌ์šฉํ•˜๊ธฐ

layoutํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฆฌ์†Œ์Šค xml ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ, java ์†Œ์Šค์—์„œ layout์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ ์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ Layout ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ๊ฑฐ์˜ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๋ฆฌ์†Œ์Šค XMLํŒŒ์ผ์— Layoutํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋œ๋‹ค. 

( ๊ตฌ๊ธ€์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ์— ๋”ฐ๋ฅด๋ฉด xml๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ui์˜ ๊ตฌ์กฐ๋ฅผ ์‹œ๊ฐํ™”ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๊ณ , ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋””๋ฒ„๊น…ํ•˜๊ธฐ๋„ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ)


3) Android Layout ๊ณตํ†ต์‚ฌํ•ญ

↓ ์•„๋ž˜ ๋งํฌ๋Š” ์ดํ•ด๋„ ์ž˜๋˜๊ณ  ์ž์„ธํ•˜๋‹ค. ์ฐธ๊ณ !

https://recipes4dev.tistory.com/87?category=658689

 

์•ˆ๋“œ๋กœ์ด๋“œ ๋ ˆ์ด์•„์›ƒ ๊ณตํ†ต์‚ฌํ•ญ. (Android Layout Common)

1. "layout_"์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์†์„ฑ. Layout์— ์—ฌ๋Ÿฌ View ์œ„์ ฏ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋“ค์„ ์‚ดํŽด๋ณด๋ฉด, ๋งŽ์€ ์†์„ฑ๋“ค ์ค‘์— "layout_"์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์†์„ฑ๋“ค์ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. View๊ฐ€ ๋ถ€๋ชจ Layout์—์„œ ์ฐจ์ง€ํ•˜๏ฟฝ๏ฟฝ

recipes4dev.tistory.com

์ฐธ๊ณ  :  https://recipes4dev.tistory.com/66


 

Layouts - ConstraintLayout, Guideline,LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, space

Legacy - GridLayout, ListView, TabHost, RelativeLayout, GridView

 

โŠ™ LinearLayout

https://developer.android.com/reference/android/widget/LinearLayout

: view๋“ค์„ ์ˆ˜ํ‰์ ์œผ๋กœ๋‚˜ ์ˆ˜์ง์ ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ ˆ์ด์•„์›ƒ

android:orientation - ์ž์‹ view๋“ค์ด row(์—ด)์˜ ํ˜•ํƒœ๋กœ ๋†“์ผ ๊ฒƒ์ธ์ง€, column(ํ–‰)์˜ ํ˜•ํƒœ๋กœ ๋†“์ผ ๊ฒƒ์ธ์ง€. row์˜ ํ˜•ํƒœ๋กœ ์„ธํŒ…ํ•˜๊ณ  ์‹ถ์œผ๋ฉด "horizontal" ์„, column์˜ ํ˜•ํƒœ๋กœ ์„ธํŒ…ํ•˜๊ณ  ์‹ถ์œผ๋ฉด "vertical"์„ ์‚ฌ์šฉ.

android:gravity - content ๋‚ด์—์„œ ๊ฐ์ฒด๊ฐ€ ์ž์‹ ์˜ ๊ฒฝ๊ณ„ ๋‚ด์—์„œ x๋ฐ y์ถ•์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€. 

https://developer.android.com/guide/topics/ui/layout/linear.html

android:layout_weight- ๋…๋ฆฝ์ ์œผ๋กœ ์ž์‹ view์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ์†์„ฑ์€ ์ค‘์š”์ •๋„๋ฅผ ํ• ๋‹นํ•˜๊ณ , ํฐ weight๊ฐ’์€ ๋‚˜๋จธ์ง€ ๋‚จ์€ ๊ณต๊ฐ„์œผ๋กœ ํ™•์žฅ๋˜์–ด ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค.

 

โŠ™ RelativeLayout

https://developer.android.com/guide/topics/ui/layout/relative

: ์ž์‹ view๋ฅผ relative(์ƒ๋Œ€์ ์ธ) position์— ๋ณด์ด๋Š” view group์ด๋‹ค. ๊ฐ๊ฐ view์˜ position์€ ๋‹ค๋ฅธ view์— ์ƒ์žฌ๊ฑฐ์œผ๋กœ ์ •์˜๋œ๋‹ค. ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค ๋””์ž์ธ์— ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ค‘์ฒฉ๋œ viewgroup์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ ๊ณ„์ธต๊ตฌ์กฐ๋ฅผ flatํ•˜๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

// ์ž์‹View์œ„์ ฏ๋“ค์ด ์„œ๋กœ ๊ฐ„์˜ ์ƒ๋Œ€์  ๋ฐฐ์น˜ ๊ด€๊ณ„์— ๋”ฐ๋ผ ํ™”๋ฉด์— ํ‘œ์‹œ๋  ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” Layout ํด๋ž˜์Šค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด A๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ณ  B๋Š” A์˜ ์˜ค๋ฅธ์ชฝ์— ํ‘œ์‹œ, ๋˜๋Š” C๋ฅผ ์ฒซ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ๋‘๊ณ  D๊ฐ€ C์•„๋ž˜์— ์œ„์น˜ํ•˜๋„๋ก ๋ฐฐ์น˜ ๋“ฑ. ์ƒ๋Œ€์ ์ธ ์œ„์น˜๋ฅผ ์ง€์ •ํ• ๋•Œ ๊ทธ ๋Œ€์ƒ์ด ๋ฐ˜๋“œ์‹œ RealativeLayout์— ํฌํ•จ๋œ View ์œ„์ ฏ์ด์–ด์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. 

 

โŠ™ FrameLayout

: ์ฃผ๋กœ ํ•˜๋‚˜์˜ ์ž์‹ View ์œ„์ ฏ๋งŒ ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” layout ํด๋ž˜์Šค. ํ•˜์ง€๋งŒ ์˜ค์ง ํ•˜๋‚˜์˜ ์ž์‹ view ์œ„์ ฏ๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹ˆ๋‹ค. FrameLayout์— ์—ฌ๋Ÿฌ View ์œ„์ ฏ์„ ์ž์‹์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฒน์ณ์ง„ ํ˜•ํƒœ๋กœ ํ‘œ์‹œ๋˜๊ณ , ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ View ์œ„์ ฏ์ด ๊ฐ€์žฅ ์ƒ์œ„์— ํ‘œ์‹œ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์ด์š”ํ•ด ๊ฐ€์žฅ ์ƒ์œ„์˜ View ์œ„์ ฏ๋งŒ ํ‘œ์‹œํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ณด์ด์ง€ ์•Š๊ฒŒ ๋งŒ๋“ฆ์œผ๋กœ์จ ํ•˜๋‚˜์˜ ์ž์‹ View๋งŒ ํ‘œ์‹œ๋˜๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค.

FrameLayout์ด ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ˆ ์ค‘ ํ•œ ๊ฐ€์ง€๋Š” Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ํŠนํžˆ ์—ฌ๋Ÿฌ Fragment๋ฅผ ๋™์ผํ•œ ์œ„์น˜ ๋‚ด์—์„œ ๊ต์ฒดํ•˜์—ฌ ํ‘œ์‹œํ•˜๊ณ ์ž ํ•  ๋•Œ, Fragment์˜ ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ๋กœ์จ FrameLayout์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

โŠ™ TableLayout

: ์ž์‹ View ์œ„์ ฏ๋“ค์„ ํ…Œ์ด๋ธ”(ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ) ๋กœ ๋‚˜๋ˆ„์–ด ํ‘œ์‹œํ•˜๋Š” layout ํด๋ž˜์Šค

 

โŠ™ ListView์™€ GridView

: ์ด๋ฆ„์—์„œ ์˜คํ•ดํ•  ์ˆ˜ Layout์ด ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ์˜คํ•ดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—„์—ฐํžˆ viewGroup์œผ๋กœ ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์€ Layoutํด๋ž˜์Šค์˜ ํ•œ ์ข…๋ฅ˜. ๋™์ผํ•œ ์ž์‹ View์œ„์ ฏ์„ ๋‚ด์šฉ๋งŒ ๋‹ฌ๋ฆฌํ•˜์—ฌ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ‘œ์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ListView์™€ GridView๊ฐ€ ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 


Text - TextView,EditText

โŠ™TextView

https://developer.android.com/reference/android/widget/TextView

: ์•ˆ๋“œ๋กœ์ด๋“œ UI๋ฅผ ๊ตฌ์„ฑํ•จ์— ์žˆ์–ด ํ™”๋ฉด์— ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹น. ํ…์ŠคํŠธ์™€ ์—ฐ๊ด€๋œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋Š” Button, EditText์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค

โŠ™EditText

User๊ฐ€ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ


Button - Button, imageButton, ChipGroup, Chip, CheckBox, RadioGroup, RadioButton, ToggleButton, Switch

โŠ™imageButton

: ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๋ฅด๋ฉด ํด๋ฆญ๋˜๋Š” ๋ฒ„ํŠผ์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค. 

โŠ™ChipGroup

: ๋‹ค์ˆ˜์˜ chip์„ holdํ•œ๋‹ค. ๋””ํดํŠธ๋กœ chip๋“ค์€ ๋‹ค์ˆ˜์˜ ๋ผ์ธ์œผ๋กœ ์ปดํ“จํ„ฐ ํ™”๋ฉด์—์„œ ํ…์ŠคํŠธ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ์กฐ์ •ํ•œ๋‹ค.

์ด๋Ÿฐ๊ฒŒ chip!

โŠ™Checkbox

:์ฒดํฌ๋ฐ•์Šค๋Š” ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ํ•˜๋‚˜ ๋˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์˜ต์…˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

์ „ํ˜•์ ์œผ๋กœ๋Š” ์ˆ˜์ง๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ

โŠ™RadioGroup

: ์ด ํด๋ž˜์Šค๋Š” ๋‹ค์ˆ˜์˜ radio button ์„ธํŠธ์— ๋Œ€ํ•œ ๋‹ค์ค‘ ์ œ์™ธ ๋ฒ”์œ„๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

https://yoo-hyeok.tistory.com/5

 

โŠ™RadioButton

: ์ฃผ๋กœ ์—ฌ๋Ÿฌ์ข…๋ฅ˜์˜ ์„ ํƒ ํ•ญ๋ชฉ์—์„œ ํ•œ๊ฐ€์ง€๋งŒ ์„ ํƒํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฒ„ํŠผ. Radio Button์€ ์ฃผ๋กœ RadioGroup๋‚ด์— ์กด์žฌํ•œ๋‹ค. ๋ผ์ด์˜ค ๊ทธ๋ฃน ๋‚ด์˜ ๋ผ๋””์˜ค ๋ฒ„ํŠผ์ด ์กด์žฌํ•˜์—ฌ์•ผ ๋ฆฌ์ŠคํŠธ ์ค‘ ํ•œ๊ฐ€์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โŠ™ToggleButton

: ๋‘๊ฐ€์ง€ states์ค‘ setting์„ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.  ์˜ˆ๋ฅผ ๋“ค๋ฉด on, off

โŠ™Switch

: ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ toggle button (= slider ํ˜•ํƒœ)


Widgets - View, ImageView, WebView, VideoView, CalendarView, SeekBar, SearchView, TextureView, Horizontal Divider, Vertical Divider

 

โŠ™View

โŠ™ImageView

: ImageView๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ™”๋ฉด์— ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์ถœ๋ ฅํ•œ๋‹ค. 

drawable ๋ฆฌ์†Œ์Šค ์ด๋ฏธ์ง€ ๋“ฑ๋ก >> ImageView๋กœ ์ด๋ฏธ์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ >> ImageView ์†์„ฑ ์ถ”๊ฐ€ >>์ž๋ฐ” ์†Œ์Šค์—์„œ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ

 

โŠ™WebView

: ์›น๋ทฐ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋ ˆ์ž„์— ๋‚ด์žฅ๋œ ์›น ๋ธŒ๋ผ์šฐ์ € ์ปดํฌ๋„ŒํŠธ๋กœ ๋ทฐ ํ˜•ํƒœ๋กœ ์•ฑ์— ์ž„๋ฒ ๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์›น ๋ทฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ ธ ์ปดํฌ๋„ŒํŠธ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์›น๋ธŒ๋ผ์šฐ์ ธ ์ˆ˜์ค€์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ๊ณค๋ž€ํ•˜๋‹ค. ์ผ๋ฐ˜์ ์ธ ์›น ๋ธŒ๋ผ์šฐ์ ธ๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ OS์— ๋งž๊ฒŒ ์ผ๋ถ€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ์™ธํ•˜๊ณ  ์ž‘๊ฒŒ ๋งŒ๋“  ์›น๋ธŒ๋ผ์šฐ์ ธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋˜๊ณ  ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— HTML5 ํ˜ธํ™˜์„ฑ๋“ฑ ๊ธฐ๋Šฅ์˜ ์ œ์•ฝ์„ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (← ์ถœ์ฒ˜: https://bcho.tistory.com/1051 [์กฐ๋Œ€ํ˜‘์˜ ๋ธ”๋กœ๊ทธ] ) 

: WebView ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ™œ๋™ ๋ ˆ์ด์•„์›ƒ์˜ ์ผ๋ถ€๋กœ ์›น ์ฝ˜ํ…์ธ ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์™„์ „ํžˆ ๊ฐœ๋ฐœ๋œ ๋ธŒ๋ผ์šฐ์ €์˜ ์ผ๋ถ€ ๊ธฐ๋Šฅ์€ ๋ถ€์กฑํ•˜๋‹ค. WebView๋Š” UI์— ๋Œ€ํ•œ ์ œ์–ด๋ ฅ ํ–ฅ์ƒ๊ณผ ์•ฑ์šฉ์œผ๋กœ ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํ™˜๊ฒฝ์— ์›น ํŽ˜์ด์ง€๋ฅผ ๋‚ด์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ๊ธ‰ ๊ตฌ์„ฑ ์˜ต์…˜์ด ํ•„์š”ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. 

 

โŠ™VideoView

https://academy.realm.io/kr/posts/android-videoview/

: ๋น„๋””์˜ค ํŒŒ์ผ์„ ๋ณด์—ฌ์ค€๋‹ค. VideoView๋ž€ ๋‹ค์–‘ํ•œ ์ž์›์—์„œ ์˜์ƒ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋™์˜์ƒ ์žฌ์ƒ ์ „๋‹ด ์œ„์ ฏ์ด๋‹ค. MediaController๋ผ๋Š” UI๋ฅผ ์ œ๊ณตํ•˜๊ณ  scaling ๊ณผ tinting๋“ฑ ๋‹ค์–‘ํ•œ ๋””์Šคํ”Œ๋ ˆ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์–ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

โŠ™CalendarView

https://dpdpwl.tistory.com/3

: ์ด ํด๋ž˜์Šค๋Š” ์บ˜๋ฆฐ๋” ์œ„์ ฏ์ด๋‹ค. ์บ˜๋ฆฐ๋”๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‹ฌ๋ ฅ์—์„œ ์ง€์›๋˜๋Š” ๋‚ ์งœ ๋ฒ”์œ„๋Š” ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โŠ™SeekBar

https://postiveemblem.tistory.com/166

: ์—„์ง€์†๊ฐ€๋ฝ์œผ๋กœ dragํ•˜๋Š” ๊ฒƒ์„ ์ถ”๊ฐ€ํ•œ progressbar ํ™•์žฅ๋ฒ„์ „์ด๋‹ค. 

: ์Šฌ๋ผ์ด๋” ํ˜•ํƒœ์˜ ๊ฒŒ์ด์ง€ ๋ฐ”๋ฅผ ๋งํ•œ๋‹ค. UI์ƒ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์ด๋ฉด ๊ทธ progress ๊ฐ’์„ ๊ฐ€์ ธ์™€ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์Œ๋Ÿ‰์ด๋‚˜ ๋ฐ๊ธฐ ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ๊ณณ์— ์‚ฌ์šฉ๋œ๋‹ค.

์ฃผ๋กœ์‚ฌ์šฉ์†์„ฑ (max = seekbar์˜ ์ตœ๋Œ€๊ฐ’ , thumb =seekbar์˜ ์ปค์„œ ์ด๋ฏธ์ง€)

 

โŠ™SearchView

https://developer.android.com/reference/android/widget/SearchView

https://salix97.tistory.com/231

: SearchView๋Š” ์•ก์…˜๋ฐ”์— ๊ฒ€์ƒ‰๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜, submit๋ฒ„ํŠผ ์—†์ด ์‚ฌ์šฉ์ž๊ฐ€ ์—”ํ„ฐ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋ฐ”๋กœ ๊ฒ€์ƒ‰์ด ๋˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โŠ™TextureView

https://developer.android.com/reference/android/view/TextureView

https://aroundck.tistory.com/2075

https://m.blog.naver.com/PostView.nhn?blogId=gomdev&logNo=220389147746&proxyReferer=https:%2F%2Fwww.google.com%2F

:TextureView๋Š” ๋น„๋””์˜ค๋‚˜ opengl ์žฅ๋ฉด๊ฐ™์€ ์ฝ˜ํ…์ธ  ์ŠคํŠธ๋ฆผ์„ ํ‘œ์‹œํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ฝ˜ํ…์ธ  ์ŠคํŠธ๋ฆผ์€ remoteํ”„๋กœ์„ธ์Šค ์—์„œ ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. ํ…์Šค์ฒ˜๋ทฐ๋Š” ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ์ฐฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๋ Œ๋”๋งํ•  ๋•Œ ํ…์Šค์ฒ˜๋ทฐ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ทธ๋ฆด ์ˆ˜ ์—†๋‹ค.

surfaceview์™€ ๋‹ฌ๋ฆฌ ํ…์Šค์ฒ˜๋ทฐ๋Š” ๋ณ„๋„์˜ ์ฐฝ์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ๋ทฐ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ์š” ์ฐจ์ด์ ์€ ํ…์Šค์ฒ˜๋ทฐ๋ฅผ ์ด๋™, ๋ณ€ํ™˜, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค. 

 

: textureview๋ž€ view๊ฐ์ฒด๋“ค ์ค‘ ๊ฐ€์žฅ ๋ณต์žกํ•˜๋ฉฐ, View์™€ surfaceTexture๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์ด๋‹ค. 

https://ggeutzzang.tistory.com/12

 

โŠ™Horizontal Divider,Vertical Divider

: DividerItemDecoration์€ RecycleView์ด๋‹ค. LinearLayoutManager์˜ ํ•ญ๋ชฉ ์‚ฌ์ด์— ๊ตฌ๋ถ„์ž๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์ด๋‹ค. 

horizontal(์ˆ˜ํ˜•)๋ฐฉํ–ฅ๊ณผ, vertical(์ˆ˜์ง) ๋ฐฉํ–ฅ ๋ชจ๋‘๋ฅผ ์ง€์›ํ•œ๋‹ค. 


Containers - Spinner, RecycleView, ScrollView, HorizontalScrollView, ViewPager, CardView, AppBarLayout, BottomAppBar, NavigationView, BottomNavigation, Toolbar, Tablayout, TabItem, ViewStub

โŠ™Spinner 

https://developer.android.com/guide/topics/ui/controls/spinner

https://m.blog.naver.com/PostView.nhn?blogId=kimsh2244&logNo=221071051884&proxyReferer=https:%2F%2Fwww.google.com%2F

: ์Šคํ”ผ๋„ˆ๋Š” ์„ธํŠธ์—์„œ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ๋””ํดํŠธ๋กœ ํ˜„์žฌ ์„ ํƒ๋˜์–ด์žˆ๋Š” ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค. ์Šคํ”ผ๋„ˆ๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ๋ฉ”๋‰ด๋Š” ์„ ํƒ๊ฐ€๋Šฅํ•œ ๋‹ค๋ฅธ ๊ฐ’๋“ค์ด๋‹ค. 

โŠ™RecycleView

https://developer.android.com/jetpack/androidx/releases/recyclerview

https://recipes4dev.tistory.com/154

: ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ์ œํ•œ๋œ ์˜์—ญ ๋‚ด์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์œ„์ ฏ์ด๋‹ค. 

: ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ์„ ๊ฐœ๋ณ„ ์•„์ดํ…œ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋ทฐ๊ทธ๋ฃน์ด๋ฉฐ, ํ•œ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๊ธฐ ํž˜๋“  ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ๋ฆฌ์ŠคํŠธ๋กœ ํ‘œ์‹œํ•ด์ฃผ๋Š” ์œ„์ ฏ์ด๋‹ค. (๋ฆฌ์ŠคํŠธ ๋ทฐ์™€ ์‚ฌ์šฉ๋ฐฉ์‹ ์œ ์‚ฌ , ๋ฆฌ์ŠคํŠธ๋ทฐ์— ์œ ์—ฐํ•จ๊ณผ ์„ฑ๋Šฅ์„ ๋”ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.)

 

โŠ™ScrollView

https://developer.android.com/reference/android/widget/ScrollView

https://yollo.tistory.com/6

: ์ˆ˜์ง(์œ„์•„๋ž˜)๋กœ ์Šคํฌ๋กคํ•˜๋Š”๊ธฐ๋Šฅ

์Šคํฌ๋กค ๋ทฐ์—๋Š” ํ•˜๋‚˜์˜ child๋งŒ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. 

 

โŠ™HorizontalScrollView

: ์ˆ˜ํ‰์œผ๋กœ ์Šคํฌ๋กค ํ•˜๋Š” ๊ธฐ๋Šฅ

 

โŠ™ViewPager

https://recipes4dev.tistory.com/148

: ์Šค์™€์ดํ”„๋ฅผ ํ†ตํ•ด ์ปจํ…์ธ  ์ „ํ™˜์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์š”์†Œ

๋ฐ์ดํ„ฐ๋ฅผ ํŽ˜์ด์ง€ ๋‹จ์œ„๋กœ ํ‘œ์‹œํ•˜๊ณ , flip์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ปจํ…Œ์ด๋„ˆ. 

์ž์ฒด์ ์œผ๋กœ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ์ง€์ง€๋Š” ์•Š๊ณ , ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๋ทฐ ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ทฐํŽ˜์ด์ €์˜ ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๋ทฐํŽ˜์ด์ €๊ฐ€ ๋ทฐ๊ทธ๋ฃน์œผ๋กœ๋ถ€ํ„ฐ ์ƒ์†๋œ ๊ฒƒ์„ ๋ณด๋ฉด, ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์œ ์ถ” ๊ฐ€๋Šฅ!

 

โŠ™CardView

https://thepassion.tistory.com/319

https://developer.android.com/jetpack/androidx/releases/cardview

:  ์•„๋ž˜ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ๊ณก์„ ํ…Œ๋‘๋ฆฌ์™€ ๊ทธ๋ฆผ์ž๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ๋ ˆ์ด์•„์›ƒ์ด๋‹ค. 

โŠ™AppBarLayout

https://developer.android.com/reference/com/google/android/material/appbar/AppBarLayout

https://readystory.tistory.com/127

: material designs app bar concept์˜ ํŠน์ง•์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ˆ˜์ง LinearLayout. 

: ์•ˆ๋“œ๋กœ์ด๋“œ๋Š” ์›๋ž˜ ActionBar๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ์•ก์…˜๋ฐ”๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ API ๋ฒ„์ „๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๊ณผ ๋‹ค๋ฅธ ๋™์ž‘์„ ์ œ๊ณตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ผ๊ด€๋œ UX๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ ๋ถˆํŽธํ•จ์ด ์žˆ์—ˆ๋‹ค.  ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๊ตฌ๊ธ€์€ material design ํŒจํ‚ค์ง€์— ์žˆ๋Š” AppBarLayout๊ณผ ToolBar์„ ์ œ์‹œํ•œ๋‹ค.

Appbarlayout์€ vertical LinearLayout์„ ์ƒ์†ํ•œ ๋ ˆ์ด์•„์›ƒ์œผ๋กœ, ํŠนํžˆ๋‚˜ ์Šคํฌ๋กค ์ œ์Šค์ฒ˜์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋™์ž‘์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

โŠ™BottomAppBar

https://developer.android.com/reference/com/google/android/material/bottomappbar/BottomAppBar

https://namget.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-bottom-app-bar-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

: ํ•œ์†์œผ๋กœ ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๊ฒŒ๋” ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด์™€ ๋‹ค์–‘ํ•œ ์˜ต์…˜๋“ค์„ ํ•˜๋‹จ์œผ๋กœ ๋‚ด๋ฆฐ ์Šคํƒ€์ผ์„ ๋งํ•œ๋‹ค.

โŠ™NavigationView

https://developer.android.com/reference/com/google/android/material/navigation/NavigationView

https://ljs93kr.tistory.com/3

:์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ‘œ์ค€ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.  ๋ณดํ†ต NavigationView๋Š” DrawerLayout ์•ˆ์— ์œ„์น˜ํ•˜๊ฒŒ๋œ๋‹ค.

 

โŠ™BottomNavigation

https://developer.android.com/reference/com/google/android/material/bottomnavigation/BottomNavigationView

: bottom์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. bottom ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋Š” ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ํƒ์ƒ‰๋ฐ ๋ทฐ๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค. ์‘์šฉํ”„๋กœ๊ทธ๋žจ์— 3-5๊ฐ€์ง€์˜ top-level destinations ์ด ์žˆ์„๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

โŠ™Toolbar

https://developer.android.com/reference/android/widget/Toolbar

https://recipes4dev.tistory.com/149

: ์•ฑ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์•ก์…˜ ๋˜๋Š” ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์•ก์…˜๋“ค์„ ์ œ๊ณตํ•˜๋Š” AppBar์„ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. 

โŠ™Tablayout

https://developer.android.com/reference/com/google/android/material/tabs/TabLayout

https://recipes4dev.tistory.com/147

:์กฐ๊ธˆ ๊ฐ„ํŽธํ•˜๊ฒŒ Tab์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค.

ํƒญ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜ํ‰ ๋ ˆ์ด์•„์›ƒ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

โŠ™ViewStub

https://developer.android.com/reference/android/view/ViewStub

https://www.charlezz.com/?p=19977

https://sites.google.com/site/endihom/home/programming-language/android/article/layout-tricks-stubs

: ViewStub์ด๋ž€ ์‚ฌ์ด์ฆˆ๊ฐ€ ์—†๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ๋ทฐ(=์ œ๋กœ ํฌ๊ธฐ ๋ทฐ)๋กœ ๋Ÿฐํƒ€์ž„์—์„œ ๋Šฆ์€ ์ „๊ฐœ(lazy-inflate)๋ฅผ ์›ํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 


Google- AdView, MapView

โŠ™AdView

https://developers.google.com/admob/android/banner?hl=ko

: ๋ฐฐ๋„ˆ ๊ด‘๊ณ ๋ฅผ ๊ฒŒ์žฌํ•˜๋ ค ํ• ๋•Œ, ๊ด‘๊ณ ๋ฅผ ๊ฒŒ์žฌํ•  Activity ๋˜๋Š” Fragment ๋ ˆ์ด์•„์›ƒ์— AdView๋ฅผ ๋„ฃ๋Š”๋‹ค.

ํ•„์ˆ˜ ์†์„ฑ์œผ๋กœ๋Š”- ads:adSize ,  ads:adUnitId๊ฐ€ ์žˆ๋‹ค.

 

โŠ™MapView

: fragment์—์„œ ๊ตฌ๊ธ€ ๋งต์„ ์‚ฌ์šฉํ•  ๋•Œ

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€