[Android ๊ธฐ์ดˆ] 4. UI ๊ธฐ๋ณธ ๊ฐœ๋… (UI, Widget, Button)
๋ฐ˜์‘ํ˜•

 

 

 

 

 

 

  • UI๋Š” ๊ฐœ๋ฐœ์˜ 50%๋ฅผ ์“ด๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ •๋„๋กœ ์ค‘์š”ํ•œ ๋ถ€๋ถ„

 

 


1. ์•ˆ๋“œ๋กœ์ด๋“œUI ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐ ์„ค๊ณ„ ๋ฐฉ๋ฒ•

 

 

 

๋ทฐ(View)

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ UI๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„ = ์œ„์ ฏ + ๋ ˆ์ด์•„์›ƒ
  • ๊ตฌ์„ฑ
    1. ์œ„์ ฏ(Widget)
        - View์˜ ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ์„œ, ์•ฑ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ์‹œ๊ฐ์ ์ธ ๋ชจ์–‘์„ ์ง€๋‹Œ UI์š”์†Œ
        - ์˜ˆ) ๋ฒ„ํŠผ, ๋ฉ”๋‰ด, ๋ฆฌ์ŠคํŠธ, ์ด๋ฏธ์ง€๋ทฐ ๋“ฑ
    2. ๋ ˆ์ด์•„์›ƒ(Layout)
        - ViewGroup์˜ ์„œ๋ธŒ ํด๋ž˜์Šค๋กœ์„œ, ๋‹ค๋ฅธ ๋ทฐ(์œ„์ ฏ ํ˜น์€ ๋ ˆ์ด์•„์›ƒ)๋ฅผ ํฌํ•จํ•˜๋ฉด์„œ
        ์ด๋“ค์„ ์ •๋ ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€๋‹Œ UI์š”์†Œ

 

 

 

UI ์„ค๊ณ„ ๋ฐฉ๋ฒ•

 

01. Layout Editor์˜ XML์„ ์‚ฌ์šฉํ•˜์—ฌ UI์„ค๊ณ„

  • AndroidStudio์˜ Layout Editor์ด์šฉ
  • ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹์˜ WYSIWYG(what you see is what you get) ์—๋””ํ„ฐ
  • ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค / ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „์— ๋Œ€ํ•œ Preview
  • XML์ฝ”๋“œ ์ž๋™ ๋ณ€ํ™˜ ๋ฐ ๋™๊ธฐํ™”

 

๐Ÿ’ก Layout Editor ๊ตฌ์„ฑ

  • 1) Palette
    - ๋ ˆ์ด์•„์›ƒ์œผ๋กœ ๋“œ๋ž˜๊ทธ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ทฐ ๋ฐ ๋ทฐ ๊ทธ๋ฃน์„ ํฌํ•จ
  • 2) Component Tree
    - ๋ ˆ์ด์•„์›ƒ์—์„œ ๊ตฌ์„ฑ์š”์†Œ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ‘œ์‹œ
  • 3) ํˆด๋ฐ”
    - ํŽธ์ง‘๊ธฐ์—์„œ ๋ ˆ์ด์•„์›ƒ ๋ชจ์–‘์„ ๊ตฌ์„ฑํ•˜๊ณ  ๋ ˆ์ด์•„์›ƒ ์†์„ฑ์„ ๋ณ€๊ฒฝ (์–ธ์–ด, ํฌ๊ธฐ, API, ๋ธ”๋ฃจํ”„๋ฆฐํŠธ ๋“ฑ)
  • 4) ๋””์ž์ธ ํŽธ์ง‘๊ธฐ
    - ๋””์ž์ธ ๋ทฐ๋‚˜ ์ฒญ์‚ฌ์ง„(blueprint)๋ทฐ ๋˜๋Š” ๋‘ ๋ทฐ ๋ชจ๋‘์—์„œ ๋ ˆ์ด์•„์›ƒ์„ ์ˆ˜์ •
  • 5) Attributes
    - ์„ ํƒํ•œ ๋ทฐ์˜ ์†์„ฑ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ
  • 6) ๋ทฐ ๋ชจ๋“œ
    - ๋ ˆ์ด์•„์›ƒ์„ ์ฝ”๋“œ, ๋””์ž์ธ, ๋ถ„ํ• (split) ๋ชจ๋“œ ์ค‘ ํ•˜๋‚˜๋กœ ํ‘œ์‹œ
    - ๋ถ„ํ•  ๋ชจ๋“œ๋Š” ์ฝ”๋“œ ์ฐฝ๊ณผ ๋””์ž์ธ ์ฐฝ์„ ๋™์‹œ์— ํ‘œ์‹œ
  • 7) ํ™•๋Œ€/์ถ•์†Œ ๋ฐ ํ™”๋ฉด ์ด๋™ ์ปจํŠธ๋กค
    - ํŽธ์ง‘๊ธฐ ๋‚ด์—์„œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ์ œ์–ด

 

02. XML file์„ ์ง์ ‘ ํŽธ์ง‘

  • ํ•„์š”ํ•œ XML ํƒœ๊ทธ๋‚˜ ์†์„ฑ์„ ์ž˜ ๋ชจ๋ฅผ ๊ฒฝ์šฐ ๋ถˆํŽธ
  • Copy & paste๋ฅผ ์ด์šฉํ•œ ํŽธ์ง‘์ด ํšจ์œจ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

 

 

 

 


 

2. ์œ„์ ฏ(Widget)

 

 

์œ„์ ฏ(Widget)

  • View์˜ ์„œ๋ธŒ ํด๋ž˜์Šค ์ค‘ ์œ„์ ฏ
  • ๋Œ€ํ‘œ์ ์ธ ์œ„์ ฏ์€ TextView, EditText, Button ๋“ฑ

 

 

 

๋ทฐ(View)

  • Viewํด๋ž˜์Šค๋Š” ๋ชจ๋“  UI ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค
  • Viewํด๋ž˜์Šค์˜ ์†์„ฑ์€ ๋ชจ๋“  UI์ปดํฌ๋„ŒํŠธ๋“ค์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ

 

layout_width, layout_height

(์˜ˆ) android:layout_width="wrap_content"

  • match_parent
      - ๋ถ€๋ชจ UI์ปดํฌ๋„ŒํŠธ์˜ ํฌ๊ธฐ์— ๋งž์ถค
      - ์›๋ž˜๋Š” fill_parent ์˜€์œผ๋‚˜ SDK2.2(ํ”„๋กœ์š”)๋ถ€ํ„ฐ๋Š” match_parent๋กœ ๋ณ€๊ฒฝ. ๋‘˜ ๋‹ค ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • wrap_content
      - UI ์ปดํฌ๋„ŒํŠธ์˜ ๋‚ด์šฉ๋ฌผ ํฌ๊ธฐ์— ๋งž์ถค

 

๋‹ค์–‘ํ•œ ์Šค๋งˆํŠธํฐ ํ•ด์ƒ๋„ ๋Œ€์‘

  • 1) px (pixels)
    - ์Šคํฌ๋ฆฐ์˜ ์‹ค์ œ ๋‹จ์œ„
    - ํ™”๋ฉด์˜ ์ „์ฒด ํ™”๋ฉด ํฌ๊ธฐ์™€ ์ƒ๊ด€ ์—†์ด ์ง€์ •ํ•œ ์ˆ˜์น˜๋งŒํผ ํ‘œ์‹œ๋˜๋Š” ์ ˆ๋Œ€์  ํ‘œ์‹œ ๋‹จ์œ„
    - ๋”ฐ๋ผ์„œ ๋””์Šคํ”Œ๋ ˆ์ด์˜ ํ•ด์ƒ๋„์— ๋”ฐ๋ผ ๋‹ฌ๋ผ๋ณด์ผ ์ˆ˜ ์žˆ์Œ (์ €ํ•ด์ƒ๋„์—์„œ ๋” ํฌ๊ฒŒ ๋ณด์ž„)
  • 2) dp (Density-independentPixel)
    - ๋ฐ€๋„์— ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„
    - ๋””์Šคํ”Œ๋ ˆ์ด์˜ ํ•ด์ƒ๋„(๋ฐ€๋„)์™€ ์ƒ๊ด€ ์—†์ด ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋‹จ์œ„
      ํ…์ŠคํŠธ์˜ ๊ฒฝ์šฐ ํ•ด์ƒ๋„๊ฐ€ ๋‹ฌ๋ผ์ง€๋ฉด ํ•ด๋‹น ํ•ด์ƒ๋„์— ๋งž๊ฒŒ ํฌ๊ธฐ๊ฐ€ ๊ณฑํ•ด์ง (x2, x3...)
      ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ ํด๋”๋ฅผ ๋”ฐ๋กœ ํ•ด์ƒ๋„์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์„œ ๋Œ€์‘
    - 160dpi(320x480) ์žฅ๋น„์—์„œ์˜ 100dp(100px)์™€ 320dpi(720x1280)์˜ 100dp(200px)๋Š” ๊ฐ™์Œ
  • 3) dpi (Dots per Inch)
    - 1์ธ์น˜์— ๋“ค์–ด๊ฐ€๋Š” ํ”ฝ์…€์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์œ„
    - 100DPI๋Š” 1์ธ์น˜ ๋‹น ํ”ฝ์…€์ด 100๊ฐœ ํฌํ•จ ๋œ๋‹ค๋Š” ๊ฒƒ์œผ๋กœ, ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๊ณ ๋ฐ€๋„
    - ์•ˆ๋“œ๋กœ์ด๋“œ์˜ ๊ธฐ์ค€ DPI๋Š” 160DPI (160DPI์ธ ๊ฒฝ์šฐ 1dp = 1px)
  • 4) in (inches)
  • 5) mm (millimeters)
  • 6) sp (ํ…์ŠคํŠธ ์ง€์ • ๋‹จ์œ„))

HDPI 1.5๋ฐฐ, XHDPI 2๋ฐฐ, XXHDPI 3๋ฐฐ, XXXHDPI 4๋ฐฐ

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํฌ๊ธฐ๋ณ„ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ๋‹ค์–‘ํ•œ ์Šค๋งˆํŠธํฐ์˜ ํ•ด์ƒ๋„์— ๋Œ€์ฒ˜ํ•œ๋‹ค.

 

 

TextView (ํ…์ŠคํŠธ ํ‘œ์‹œ)

  • View ์†์„ฑ ์ƒ์†: id, layout_width, layout_height, background, etc
  • text:"" ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด ์ง€์ •
  • textSize: ํฐํŠธ ํฌ๊ธฐ
  • textStyle: ํ…์ŠคํŠธ ์Šคํƒ€์ผ (normal, bold, italic)
  • typeface: ํ…์ŠคํŠธ ํฐํŠธ (normal, sans, serif, monspace)
  • textColor: ๋ฌธ์ž์—ด ์ƒ‰์ƒ
  • singleLine: ์†์„ฑ๊ฐ’์ด 'true'๋ฉด, ํ…์ŠคํŠธ๊ฐ€ ์œ„์ ฏ์˜ ํญ๋ณด๋‹ค ๊ธธ์–ด๋„ ๊ฐ•์ œ๋กœ ํ•œ ์ค„์— ์ถœ๋ ฅ

 

๐Ÿ’ก background

  • ๋ทฐ์˜ ๋ฐฐ๊ฒฝ์„ ์ง€์ •ํ•˜๋ฉฐ, ์ƒ‰์ƒ ๋ฐ ์ด๋ฏธ์ง€ ๋“ฑ์˜ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฐ์ฒด๋กœ ์ง€์ • ๊ฐ€๋Šฅ
  • #RGB, #ARGB, #RRGGBB, #AARRGGBB ๋„ค ๊ฐ€์ง€ ํ˜•์‹ ์ ์šฉ ๊ฐ€๋Šฅ
  • ์ฐธ๊ณ ๋กœ ์ƒ‰์ƒ์€ RGB์™€ ๊ฐ™์€ ์ปฌ๋Ÿฌ์ฝ”๋“œ๋‚˜, res/values/colors.xml ๋“ฑ๋ก, android.graphics.Color ํด๋ž˜์Šค๋กœ ์„ค์ • ๊ฐ€๋Šฅ

 

 

EditText (ํ…์ŠคํŠธ ์ž…๋ ฅ)

  • TextView์˜ ๋ชจ๋“  ์†์„ฑ ์ƒ์† (EditText๋Š” TextView์˜ ์„œ๋ธŒํด๋ž˜์Šค)
  • inputType: ์ž…๋ ฅ ์‹œ ํ—ˆ์šฉ๋˜๋Š” ํ‚ค๋ณด๋“œ ํƒ€์ž… ์„ค์ • ๋ฐ ํ‚ค๋ณด๋“œ ํ–‰์œ„๋ฅผ ์„ค์ •
  • ํ‚ค๋ณด๋“œ ํƒ€์ž… ์„ค์ •
        - “text”: ์ผ๋ฐ˜์ ์ธ ํ…์ŠคํŠธ ํ‚ค๋ณด๋“œ
        - “phone”: ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ ํ‚ค๋ณด๋“œ
        - “textEmailAddress”: @๋ฌธ์ž๋ฅผ ๊ฐ€์ง„ ํ…์ŠคํŠธ ํ‚ค๋ณด๋“œ
  • ํ‚ค๋ณด๋“œ ํ–‰์œ„ ์„ค์ •
        - “textCapWords” : ๋ฌธ์žฅ์˜ ์‹œ์ž‘์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜
        - “textAutoCorrect” : ์ž…๋ ฅ๋œ ๋‹จ์–ด์™€ ์œ ์‚ฌํ•œ ๋‹จ์–ด๋ฅผ ์ œ์‹œํ•˜๊ณ  ์ œ์‹œ๋œ ๋‹จ์–ด ์„ ํƒ ์‹œ, ์ž…๋ ฅ๋œ ๋‹จ์–ด๋ฅผ ๋Œ€์น˜
        - “textMultiLine”:์—ฌ๋Ÿฌ ์ค„์„ ์ž…๋ ฅ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ

 

 

Button (๋ฒ„ํŠผ)

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํ‘ธ์‹œ ๋ฒ„ํŠผ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์˜€์„ ๋•Œ, ์–ด๋–ค ํ–‰๋™์„ ์ˆ˜ํ–‰ ํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉ
  • Buttonํด๋ž˜์Šค๋Š” TextView์˜ ์„œ๋ธŒํด๋ž˜์Šค์ด๋ฏ€๋กœ, TextView์˜ ๋ชจ๋“  ์†์„ฑ์„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ
    - singleLine ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    - ๋ฒ„ํŠผ ๋‚ด์— ํ…์ŠคํŠธ, ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Œ
    - ๋ฒ„ํŠผ ์ „์ฒด๋ฅผ ์ด๋ฏธ์ง€๋กœ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ImageButton ์‚ฌ์šฉ

 

๐Ÿ’ก ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ ์œ„์ ฏ์„ ํด๋ฆญ ํ•  ๋•Œ, ์ง€์ •๋œ ํ–‰๋™์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‘˜ ์ค‘ ํ•˜๋‚˜ ์„ค์ •
  • (1) ๋ฒ„ํŠผ ์œ„์ ฏ์˜ onClick์†์„ฑ ํ™œ์šฉ
      - ๋ฒ„ํŠผ ์œ„์ ฏ์„ ์ •์˜ํ•œ ํ™”๋ฉด์„ contentView๋กœ ์„ค์ •ํ•œ ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค์— ์ƒˆ๋กœ์šด ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€
MainActivity.kt

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?){
    	super.onCreate(savedInstanceState)
        setContentView(R.layout.text_views) //์ด ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ
    }
    
    fun doAction(v:View) {
    Toast.makeText(getApplicationContext(), "Submitted Successfully",
    	Toast.LENGTH_SHORT).show(); // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ž‘๋™ํ•  toast ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ ํ•จ์ˆ˜ ์ƒ์„ฑ
    }
}


text_views.xml

<Button
	android:onClick="doAction"/> // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ doAction์„ ์‹คํ–‰ํ•  onClick ์„ค์ •
  • (2) ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋ฅผ ์ด์šฉ
    - ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์œ„์ ฏ์— ๋“ฑ๋ก
    - ์œ„์ ฏ์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๊ฐ€ ์ •์˜๋œ ์ผ์„ ์ˆ˜ํ–‰
MainActivity.kt

class MainActivity : AppCompatActivity() {
	override fun onCreate(savedInstanceState: Bundle?){
    	super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    
    val btn = findViewById<Button>(R.id.submit_button) // findViewbyID()๋กœ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ด
    
    btn.setOnClickListener{ // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ž‘๋™ํ•  toast ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ SetonClickListener
    Toast.makeText(this, "Submitted Successfully",Toast.LENGTH_SHORT).show();	
    	}
    }
}


text_views.xml

<Button
	android:onClick="doAction"/> // ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ doAction์„ ์‹คํ–‰ํ•  onClick ์„ค์ •

 

๐Ÿ’กfindViewByID()

  • Activity ํด๋ž˜์Šค์— ์ •์˜๋œ ๋ฉ”์†Œ๋“œ๋กœ, Activity ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ํ•ด๋‹น ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ์—ฐ๊ฒฐ๋œ XML layout ๋ฆฌ์†Œ์Šค ์š”์†Œ(์œ„์ ฏ) ์ค‘์—์„œ id์†์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•ด๋‹น Java ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ด
  • onCreate() ๋ฉ”์†Œ๋“œ ๋‚ด์˜ setContentView()๋ฅผ ํ†ตํ•ด์„œ ์—ฐ๊ฒฐ๋œ XML ๋ฆฌ์†Œ์Šค ์š”์†Œ ์ค‘์—์„œ๋งŒ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•จ
  • ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ์™€ ์—ฐ๊ฒฐ๋œ XML layout ๋ฆฌ์†Œ์Šค์— ์ •์˜๋œ ์œ„์ ฏ์„ findViewByID() ๋ฉ”์†Œ๋“œ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋Š” ์—†์Œ

 

 

 

 

 


 

3.  ์‹ค๋ฌด์—์„œ์˜ ๋ฒ„ํŠผ ๋””์ž์ธ

 

 

์ด๋ฏธ์ง€ ๋ฒ„ํŠผ

 

  • ๋Œ€๋ถ€๋ถ„์˜ ๋ฒ„ํŠผ์€ ImageView๋ฅผ ์‚ฌ์šฉ
  • ImageView ์†์„ฑ์— Clickable ์˜ต์…˜์„ true๋กœ ์„ค์ •
  • ์ด๋ฏธ์ง€๋Š” normal, pressed, disable 3๊ฐ€์ง€๋กœ ์ค€๋น„
  • ํ•ด์ƒ๋„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด dpi๋ณ„ 5๊ฐœ๋กœ ์ด๋ฏธ์ง€ ์ค€๋น„ (hdpi, mdpi, xhdpi, xxhdpi, xxxhdpi)
  • 1๊ฐœ์˜ ๋ฒ„ํŠผ์— ์ด 15๊ฐœ์˜ ์ด๋ฏธ์ง€ ํ•„์š”

 

 

9-patch (๋‚˜์ธํŒจ์น˜ ์ด๋ฏธ์ง€)

์ถœ์ฒ˜: ๋ฐ”์ด๋„์ต์Šคํ”ผ๋ฆฌ์–ธ์Šค

  • ImageView์—์„œ์˜ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€๋Š” ๊ฐ€๋กœ/์„ธ๋กœ๋ชจ๋“œ, ํ•ด์ƒ๋„์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•จ
    (์˜ˆ) ๊ฐ€๋กœ๋ชจ๋“œ ๋ณ€๊ฒฝ ์‹œ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ธฐ๊ธฐ๋ณ„ ํ•ด์ƒ๋„ ๋ฐ ํ™”๋ฉด ๋ชจ๋“œ์— ๋”ฐ๋ผ ๊ฐ๊ฐ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋ชจ๋‘ ๋งŒ๋“ ๋‹ค๋ฉด ์ข‹์ง€๋งŒ, ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ์ง€ ์•Š์Œ
  • ๋Œ€์‹ , ์ด๋ฏธ์ง€์˜ ํŠน์ • ์˜์—ญ(์ฃผ๋กœ ๊ฐ€์žฅ์ž๋ฆฌ)๋Š” ์›๋ณธ ์ด๋ฏธ์ง€ ๊ทธ๋Œ€๋กœ ํ‘œ์‹œ๋˜๋„๋ก ๋งŒ๋“ค๊ณ , ๊ทธ ์™ธ ์ด๋ฏธ์ง€์˜ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋˜๋Š” ์˜์—ญ์„ ๋ฒ„ํŠผ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋Š˜์–ด๋‚˜๋„๋ก ๋งŒ๋“ค๋ฉด ๊น”๋”ํ•œ ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€ ๋ฒ„ํŠผ์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‚˜์ธํŒจ์น˜(9-patch) ์ด๋ฏธ์ง€: ์ด๋ฏธ์ง€์—์„œ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋Š”(stretchable) ์˜์—ญ๊ณผ ์›๋ณธ ํฌ๊ธฐ๋Œ€๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•  ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ, ์ด๋ฏธ์ง€๊ฐ€ ๊ทธ๋ ค์งˆ ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ์ค„์–ด๋“ค๋”๋ผ๋„ ์›๋ณธ์ด๋ฏธ์ง€ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€

 

 

ImageView

  • ์•ฑ ํ™”๋ฉด์— ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ
  • ์‚ฌ์šฉ๋ฒ•
    - Layout ๋ฆฌ์†Œ์Šค XMLํŒŒ์ผ์— ImageView๋ฅผ ์ถ”๊ฐ€
    - ํ™”๋ฉด์— ํ‘œ์‹œ ํ•  ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ Drawable ๋ฆฌ์†Œ์Šค ํด๋”(/res/drawable)์— ์ถ”๊ฐ€
    - ํ™”๋ฉด์— ํ‘œ์‹œ ํ•  ์ด๋ฏธ์ง€(Drawable) ๋ฆฌ์†Œ์Šค ID๋ฅผ ImageView์˜ "src" ์†์„ฑ์— ์ง€์ •
    (์˜ˆ) android:src="@drawable/android_iconpic"
  • ์ฐธ๊ณ ์‚ฌํ•ญ
    - ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ํ˜•์‹์€ .jpg,.png๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‚˜ ๋Œ€๋ถ€๋ถ„.png๋ฅผ ์‚ฌ์šฉํ•จ (ํˆฌ๋ช…๋„ ๋•Œ๋ฌธ)
    - ํ•ด์ƒ๋„์— ๋”ฐ๋ฅธ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋Š” ๋ณ„๋„์˜ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณต์‚ฌ (drawable-xhdpi ๋“ฑ)
    - ํŒŒ์ผ๋ช… ํ•œ๊ธ€, ์˜์–ด ๋Œ€๋ฌธ์ž ๋ถˆ๊ฐ€, ์ˆซ์ž๋กœ ํŒŒ์ผ๋ช… ์‹œ์ž‘ ๋ถˆ๊ฐ€
  • xml์ด ์•„๋‹Œ Kotlin ์†Œ์Šค์—์„œ ์ง์ ‘ ์ด๋ฏธ์ง€๋ทฐ์˜ ์ด๋ฏธ์ง€ ๋ณ€๊ฒฝ
    var imageView: ImageView = findViewById(R.id.imageView1)
    imageView.setImageResource(R.drawable.android_iconpic)

 

๐Ÿ’ก ImageView์˜ ์˜์—ญ์— ๋งž๊ฒŒ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ ˆ

์ถœ์ฒ˜: Develou

  • scaleType ์†์„ฑ >  android:scaleType ์ด์šฉ
  • 1) android:scaleType = "Center"
    - ์ด๋ฏธ์ง€์˜ ๋ณธ๋ž˜ ํฌ๊ธฐ์™€ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ ์ด๋ฏธ์ง€์˜ ์ค‘์•™์„ ImageView์˜ ์ค‘์‹ฌ์— ๋งž์ถค
    - ImageView๋ณด๋‹ค ์ด๋ฏธ์ง€๊ฐ€ ํด ๊ฒฝ์šฐ ์ด๋ฏธ์ง€๊ฐ€ ์ž˜๋ฆด ์ˆ˜ ์žˆ์Œ
  • 2) android:scaleType = "centerCrop"
    - ์ด๋ฏธ์ง€์˜ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ ๊ฐ€๋กœ,์„ธ๋กœ ์ค‘ ์งง์€ ์ชฝ์„ ImageView์— ๊ฝ‰ ์ฐจ๊ฒŒ ์ถœ๋ ฅ
    - ImageView๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋ถ€๋ถ„์€ ์ž˜๋ฆด ์ˆ˜ ์žˆ์Œ
  • 3) android:scaleType = "centerInside"     
    - ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ์ค‘ ๊ธด ์ชฝ์„ ImageView์˜ ๋ ˆ์ด์•„์›ƒ์— ๋งž์ถฐ ์ถœ๋ ฅ
    - ์ด๋ฏธ์ง€์˜ ๋น„์œจ์€ ์œ ์ง€๋˜๋ฉฐ ๋‚จ๋Š” ๊ณต๊ฐ„์€ background์˜ ์ƒ‰์œผ๋กœ ์ฑ„์›Œ์ง
    - fitCenter์™€ ๋‹ฌ๋ฆฌ ์ด๋ฏธ์ง€๊ฐ€ ImageView๋ณด๋‹ค ์ž‘์„ ๊ฒฝ์šฐ ํฌ๊ธฐ๊ฐ€ ์œ ์ง€
  • 4) android:scaleType = "fitCenter"
    - ์ด๋ฏธ์ง€์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ์ค‘ ๊ธด ์ชฝ์„ ImageView์˜ ๋ ˆ์ด์•„์›ƒ์— ๋งž์ถฐ ์ถœ๋ ฅ (centerInside์™€ ๋งค์šฐ ์œ ์‚ฌ)
    - ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ImageView๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ImageView์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
  • 5) android:scaleType = "fitStart"
    - ๊ฐ€๋กœ, ์„ธ๋กœ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ fitํ•˜๊ฒŒ ์ถœ๋ ฅ
    - fitCenter์™€ ๋‹ค๋ฅด๊ฒŒ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
  • 6) android:scaleType = "fitEnd"
    - ๊ฐ€๋กœ, ์„ธ๋กœ ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ fitํ•˜๊ฒŒ ์ถœ๋ ฅ
    - fitCenter์™€ ๋‹ค๋ฅด๊ฒŒ ์šฐ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
  • 7) android:scaleType = "fitXY"
    - ๊ฐ€๋กœ, ์„ธ๋กœ ๋น„์œจ์— ์ƒ๊ด€ ์—†์ด ImageView์— ๊ฝ‰ ์ฐจ๊ฒŒ ์ถœ๋ ฅ
    - ์ด๋ฏธ์ง€๊ฐ€ ์ฐŒ๊ทธ๋Ÿฌ์ง„ ์ƒํƒœ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Œ
  • 8) android:scaleType = "matrix"
    - ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ, ๋น„์œจ์„ ์œ ์ง€ํ•˜๋ฉฐ ImageView์˜ ์ขŒ์ธก ์ƒ๋‹จ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
    - ์ด๋ฏธ์ง€๊ฐ€ ํฌ๋‹ค๋ฉด ImageView ์™ธ์˜ ๋ถ€๋ถ„์€ ์ž˜๋ฆผ

 

 

 

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