Resource Convention - android-team-02/developer-study-platform GitHub Wiki

ํ—ค์ด๋”œ๋Ÿฌ Resource Convention ์ฐธ๊ณ 

Layout

  • <WHAT>_<WHERE>

WHAT

Prefix ์„ค๋ช…
activity_ Activity์—์„œ ์“ฐ์ด๋Š” layout
fragment_ Fragment์—์„œ ์“ฐ์ด๋Š” layout
dialog_ Dialog์—์„œ ์“ฐ์ด๋Š” layout
view_ CustomView์—์„œ ์“ฐ์ด๋Š” layout
item_ RecyclerView, GridView, ListView๋“ฑ์—์„œ ViewHolder์— ์“ฐ์ด๋Š” layout
layout_ <include/>๋กœ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ณตํ†ต์˜ layout

์˜ˆ์‹œ

  • activity_main: MainActivity์˜ layout
  • fragment_request: RequestFragment์˜ layout
  • dialog_contact: ๋ฌธ์˜์•ˆ๋‚ด Dialog์˜ layout
  • view_rating: ์ปค์Šคํ…€์œผ๋กœ ๋งŒ๋“  RatingView์˜ layout
  • item_my_car: ๋‚ด์ฐจ๋Ÿ‰ ๋ชฉ๋ก์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ๊ฐ์˜ item์˜ layout
  • layout_dealer_review: ์žฌ์‚ฌ์šฉ๋˜๋Š” ๋”œ๋Ÿฌ๋ฆฌ๋ทฐ layout

ID

  • <WHAT>_<DESCRIPTION>
  • View์˜ ๋Œ€๋ฌธ์ž๋ฅผ ์ถ•์•ฝํ•˜์—ฌ <WHAT>์˜ Prefix๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์•„๋ž˜ ์ด๋ฆ„๊ทœ์น™์„ ์ ์šฉํ•œ๋‹ค.
  1. Android์˜ View๋Š” camel case์˜ ๋Œ€๋ฌธ์ž๋ฅผ ์ถ•์•ฝํ•œ ํ˜•ํƒœ๋กœ ์ •ํ•œ๋‹ค.
    : TextView -> tv_
  2. ๋งŒ์•ฝ View์˜ ์ด๋ฆ„์ด Space, Switch์™€ ๊ฐ™์ด 1๊ฐœ์˜ ๋Œ€๋ฌธ์ž๋งŒ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ชจ๋‘ ์†Œ๋ฌธ์ž์ธ ์•„์ด๋””๋กœ ์ •ํ•œ๋‹ค.
    : Switch -> switch_
  3. CustomView๋Š” ์ „์ฒด View์˜ ์ด๋ฆ„์„ snake case์ด๋ฆ„์œผ๋กœ ์ •ํ•œ๋‹ค.
    : MyCustomView -> my_custom_view
    (๋งŒ์•ฝ 1๊ฐœ์˜ xml์— ๊ฐ™์€ ์—ฌ๋Ÿฌ CustomView๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด <WHAT>_<DESCRIPTION>์˜ ํ˜•ํƒœ๋กœ ์ •ํ•œ๋‹ค.)

WHAT

View Prefix
TextView tv_
ImageView iv_
CheckBox cb_
RecyclerView rv_
EditText et_
ProgressBar pb_
FrameLayout fl_
NestedScrollView nsv_
Space space_
Switch switch
AbcDeFgh adf_
Abcdef abcdef_
Toolbar toolbar_
MyCustomView my_custom_view
YourView your_view

๊ธฐํƒ€

  • ํ•ด๋‹น View๋ฅผ ํŠน์ •๊ธฐ๋Šฅ๊ณผ ์ƒ๊ด€์—†์ด VISIBLE/GONE๋“ฑ์˜ View์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด view_xxx๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ๋„ ํ—ˆ์šฉํ•œ๋‹ค.

์˜ˆ์‹œ

  • iv_close: ๋‹ซ๊ธฐ ImageView
  • tv_select: ์„ ํƒ TextView
  • rv_car_list: ์ž๋™์ฐจ ๋ชฉ๋ก RecyclerView
  • view_etc_model: ๊ธฐํƒ€ ๋ชจ๋ธ ํ™”๋ฉด LinearLayout

Drawable

  • <WHAT>_<DESCRIPTION>(_<WHERE>)(_<SIZE>)
  • ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ ๋’ค์— where ์ถ”๊ฐ€
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ size ์ถ”๊ฐ€

WHAT

Prefix ์„ค๋ช…
btn_ ๋ฒ„ํŠผ์œผ๋กœ ์“ฐ์ด๋Š” ์ด๋ฏธ์ง€
ic_ ์•„์ด์ฝ˜ ํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€
bg_ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ƒ‰์ƒ, radius ์ •ํ•˜๋Š” ํŒŒ์ผ
img_ ์‹ค์ œ์‚ฌ์ง„์ด๊ฑฐ๋‚˜ ์•„์ด์ฝ˜ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ์ผ๋Ÿฌ์ŠคํŠธํ˜•ํƒœ์˜ ์ด๋ฏธ์ง€
div_ divider๋กœ ํ™œ์šฉ๋˜๋Š” ์ด๋ฏธ์ง€
selector_ selector๋กœ ํ™œ์šฉ๋˜๋Š” ํŒŒ์ผ

Background

  • ๋ฐฐ๊ฒฝ์ด white์ƒ‰์˜ 24dp๋กœ ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋Š” bg_white_radius_24dp.xml๋กœ ํ•œ๋‹ค.
  • ๋ฐฐ๊ฒฝ์ด ํˆฌ๋ช…ํ•˜๋ฉฐ ๋ฐฐ๊ฒฝ์˜ ์„ ๋งŒ์„ sky_blue์ƒ‰์˜ 8dp๋กœ ํ…Œ๋‘๋ฆฌ๋ฅผ ๊ทธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋Š” bg_stroke_sky_blue_radius_8dp.xml๋กœ ํ•œ๋‹ค.

์˜ˆ์‹œ

  • selector_call.xml: ์ „ํ™”๊ฑธ๊ธฐ ์ด๋ฏธ์ง€์˜ selector xml
  • ic_dealer_gift.png: ๋”œ๋Ÿฌ๊ฐ€ ๋ณด๋‚ด์ค€ ๊ธฐํ”„ํ‹ฐ์ฝ˜์„ ๋ณด์—ฌ์ค„๋•Œ ํ‘œ์‹œ๋˜๋Š” ์ด๋ฏธ์ง€
  • img_splash_chart.png: ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ง€๋Š” ์ฐจํŠธ ์ด๋ฏธ์ง€

Dimension

  • <WHERE>_<DESCRIPTION>_<WHAT>
  • ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋ผ๋ฉด ๋ณ€์ˆ˜๋กœ ์ •์˜ํ•ด์„œ @dimen/xxx์™€ ๊ฐ™์ด ์‚ฌ์šฉ
  • ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ 16dp์™€ ๊ฐ™์ด ์ž‘์„ฑ

Margin/Padding

  • ๋Œ€๋ถ€๋ถ„์˜ margin/padding์€ ์•„๋ž˜ ์ •์˜๋œ space_xxx๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋„๋ก ํ•œ๋‹ค.
<dimen name="space_x_small">8dp</dimen>
<dimen name="space_small">12dp</dimen>
<dimen name="space_median">16dp</dimen>
<dimen name="space_s_large">18dp</dimen>
<dimen name="space_large">20dp</dimen>
<dimen name="space_x_large">24dp</dimen>
  • ๊ทธ์™ธ์— ํŠน์ • ํ™”๋ฉด์—์„œ ์œ„์˜ ๊ฐ’์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๊ฒฝ์šฐ, ์˜ ๊ทœ์น™์œผ๋กœ ๋งŒ๋“ ๋‹ค.
<dimen name="register_car_item_car_model_start_padding">40dp</dimen>
<dimen name="register_car_item_grade_start_padding">56dp</dimen>
<dimen name="register_car_item_car_detail_start_padding">72dp</dimen>
  • 2๋ฒˆ ์ด์ƒ ์“ฐ์ด๋Š”๊ฒฝ์šฐ๋Š” dimen์— ์ •์˜ํ•ด์ฃผ๋Š” ๊ฒƒ์„ ๊ฐ•์ œํ•˜๊ณ  1๋ฒˆ๋งŒ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ์—๋Š” xml ์ฝ”๋“œ์— ๋„ฃ์–ด๋„ ๊ดœ์ฐฎ์€ ๊ฒƒ์œผ๋กœ ํ•œ๋‹ค.

Height/Size

  • ๋†’์ด๋งŒ ์ง€์ •ํ• ๋•Œ๋Š” height, 1:1 ๋น„์œจ๋กœ ๊ฐ™์€ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ๋•Œ๋Š” size๋กœ ํ•œ๋‹ค.
<dimen name="toolbar_height">56dp</dimen>
<dimen name="register_input_view_default_height">280dp</dimen>
<dimen name="register_input_view_collapse_height">200dp</dimen>
<dimen name="dealer_profile_image_size">48dp</dimen>

String

  • <WHERE>_<DESCRIPTION>
  • ํŠน์ •ํ™”๋ฉด์—์„œ ์“ฐ์ด๋Š” ํ…์ŠคํŠธ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ๊ณตํ†ต์œผ๋กœ ์žฌ์‚ฌ์šฉ๋  ํ…์ŠคํŠธ๋ผ๋ฉด all_<DESCRIPTION>๋กœ ์ด๋ฆ„์„ ์ง“๋Š”๋‹ค.
  • where ๋ฐ”๋€Œ๋Š” ๋ถ€๋ถ„์—์„œ ํ•œ ์ค„ ๋„์šฐ๊ธฐ

์˜ˆ์‹œ

  • permission_dialog_camera_title: ์นด๋ฉ”๋ผ๊ถŒํ•œ์„ ์š”๊ตฌํ•˜๋Š” Dialog์˜ ์ œ๋ชฉ
  • permission_dialog_camera_description: ์นด๋ฉ”๋ผ๊ถŒํ•œ์„ ์š”๊ตฌํ•˜๋Š” Dialog์˜ ์„ค๋ช…๋‚ด์šฉ
  • all_yes: ๋„ค
  • all_ok_understand: ์—ฌ๋Ÿฌ Dialog์—์„œ ๋„ค, ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค๋กœ ์“ฐ์ด๋Š” ๊ณตํ†ต์˜ ํ…์ŠคํŠธ

๋ฌธ๋‹จ

  • ๋ฌธ๋‹จํ˜•ํƒœ์˜ ๊ธด ๋ฌธ์ž์—ด๋กœ ๊ฐœํ–‰(\\n)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, \\n์„ ๋‹ค์Œ์ค„์˜ ์•ž์— ์“ด๋‹ค.
 <string name="sample">๋ฌธ๋‹จ ์ฒซ๋ฒˆ์งธ์ค„
        \\n๋ฌธ๋‹จ ๋‘๋ฒˆ์งธ์ค„
        \\n๋ฌธ๋‹จ ์„ธ๋ฒˆ์งธ์ค„</string>

Color

Theme/Style

  • 1๋ฒˆ๋งŒ ์“ฐ์ด๋Š” ๊ฒฝ์šฐ์—๋Š” style์„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. (๋‹จ, ์•ž์œผ๋กœ ์žฌ์‚ฌ์šฉ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ์—๋Š” ๊ฐ€๋Šฅ)

Naming

  • style์˜ ์ด๋ฆ„์€ parent์˜ ์ด๋ฆ„ํŒจํ„ด๊ณผ ๋งž์ถ˜๋‹ค.
<style name=โ€Widget.HeyDealer.Buttonโ€ parent=โ€@style/Widget.AppCompat.Buttonโ€>
...
</style>
  • parent์—์„œ ์ผ๋ถ€ ๋‚ด์šฉ๋งŒ ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•˜๋Š”๊ฒฝ์šฐ, parent ์ด๋ฆ„ ๋’ค์— ๋‹ฌ๋ผ์ง„ ๋‚ด์šฉ์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
<style name="Theme.HeyDealer.Transparent" parent="Theme.HeyDealer">
...
</style>
  • Base Style๊ณผ Theme์˜ ๊ฒฝ์šฐ๋Š” ์•ž์— Base๋ฅผ ๋ถ™์ธ๋‹ค.
<style name="Base.Theme" parent="..." />
<style name="Base.Theme.Transparent">...</style>
<style name="HeyDealerTheme" parent="Base.Theme">...</style>
<style name="HeyDealerTheme.Transparent" parent="Base.Theme.Transparent" />

<style name="Base.TextAppearance.HeyDealer" parent="...">...</style>
<style name="Base.TextAppearance.HeyDealer.Headline">...</style>
<style name="TextAppearance.HeyDealer.Headline1" parent="Base.TextAppearance.HeyDealer.Headline">...</style>
<style name="TextAppearance.HeyDealer.Headline2" parent="Base.TextAppearance.HeyDealer.Headline">...</style>

Attribute

  • Attribute์ด๋ฆ„์€ camel case๋กœ ํ•œ๋‹ค.
<attr name="numStars" format="integer" />
  • ๊ธฐ์กด์— ์ •์˜๋˜์–ด์žˆ๋Š” android:xxx์™€ ๊ฐ™์€ ๋™์ž‘์„ ์œ ๋„ํ•˜๋Š” ๊ฒฝ์šฐ, ์ด tag๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
<declare-styleable name="SpannedGridLayoutManager">
 <attr name="android:orientation" />
...
</declare-styleable>
โš ๏ธ **GitHub.com Fallback** โš ๏ธ