๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค2024 ์•ˆ๋“œ๋กœ์ด๋“œ/๐Ÿฟ ์˜ํ™” ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์ผ์ง€

๐ŸŽจ๋ฉ”์ธ ํ™”๋ฉด UI ๊ตฌํ˜„ ๊ณผ์ •๊ณผ ์งˆ๋ฌธ ๊ธฐ๋ก

by hyeonha 2024. 4. 5.

๋ชฉ์ฐจ

    1๏ธโƒฃํ™”๋ฉด์„ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค๊นŒ?

    ํ˜„์žฌ ๋ฉ”์ธ ํ™”๋ฉด์˜ ๊ตฌ์กฐ์ด๋‹ค.  ์œ„์—์„œ ๋ถ€ํ„ฐ ์•ฑ๋ฐ” ์™€ ํƒญ์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ณ  ํƒญ์—์„œ ์„ ํƒ๋œ ์•„์ดํ…œ์— ๋”ฐ๋ผ์„œ ์•„๋ž˜์— ๋ณด์ด๋Š” ํ™”๋ฉด์ด ๋‹ฌ๋ผ์ง„๋‹ค.

    ๋”ฐ๋ผ์„œ ํƒญ ๋ ˆ์ด์•„์›ƒ ๋ฐ‘์˜ ํ™”๋ฉด๋“ค์€ ํ”„๋ž˜๊ทธ๋จผํŠธ๋กœ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.

    ํƒญ์—์„œ๋Š” ์ „์ฒด์™€ ํŒ”๋กœ์ž‰์ด๋ผ๋Š” ์•„์ดํ…œ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ „์ฒด์—์„œ ๋ณด์ด๋Š” ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ1๊ณผ ํŒ”๋กœ์ž‰ํ•˜๋Š” ๋‚ด์šฉ๋งŒ ๋ณด์ด๋Š” ํ™”๋ฉด์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ2๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

     

    2๏ธโƒฃํ”„๋ž˜๊ทธ๋จผํŠธ ๊ตฌํ˜„ ๊ณผ์ •

    ํ”„๋ž˜๊ทธ๋จผํŠธ 1์˜ ๊ตฌ์กฐ

    ํ”„๋ž˜๊ทธ๋จผํŠธ 2์˜ ๊ตฌ์กฐ 

     

    ๐Ÿ”ฅ๋ฌธ์ œ

    ์•กํ‹ฐ๋น„ํ‹ฐ ๋‚ด๋ถ€์— ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ ˆ์ด์•„์›ƒ์ด ๋งž์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” margin์„ ์กฐ์ ˆํ•˜์—ฌ ๊ฐ„๊ฒฉ์„ ์ž„์˜๋กœ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. 

    ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ layout_height๋ฅผ 0dp๋กœ ์„ค์ •ํ•˜๋ฉด ๊ณต๊ฐ„์— ๋งž๊ฒŒ ์ตœ๋Œ€ ํฌ๊ธฐ๋กœ ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค!!

    3๏ธโƒฃ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ ๊ตฌํ˜„ ๊ณผ์ • 

     

    4๏ธโƒฃ๋ทฐํŽ˜์ด์ €2 ๊ตฌํ˜„ ๊ณผ์ • 

    ๐Ÿ”ฅ๋ฌธ์ œ

    ํ”„๋ž˜๊ทธ๋จผํŠธ์™€ ๋ทฐํŽ˜์ด์ €2๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.

     

     

    ๐Ÿ’งํ•ด๊ฒฐ

    ๋ทฐ ํŽ˜์ด์ €2๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋™์ž‘์ด ์ž˜ ๋˜์—ˆ๋‹ค.

     

    ์ด์œ ๋Š” ?

     

    5๏ธโƒฃ๋ชจ๋‹ฌ๋ฐ”ํ…€ ์‹œํŠธ ๊ตฌํ˜„  ๊ณผ์ •

    ๋ฐ”ํ…€ ์‹œํŠธ ๊ตฌํ˜„ ์ˆœ์„œ

    1๏ธโƒฃ. BottomSheetDialogFragment๋ฅผ ์ƒ์†๋ฐ›๋Š” ๋ชจ๋‹ฌ ๋ฐ”ํ…€ ์‹œํŠธ ํด๋ž˜์Šค ์ƒ์„ฑ

    2๏ธโƒฃ ์•กํ‹ฐ๋น„ํ‹ฐ๋‚˜ ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ์ด ๋ฐ”ํ…€ ์‹œํŠธ ํด๋ž˜์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

     

    ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๊ฒฝ์šฐ

    class MainActivity : AppCompatActivity() {
        ...
        val modalBottomSheet = ModalBottomSheet()
        modalBottomSheet.show(supportFragmentManager, ModalBottomSheet.TAG)
        ...
    }

     

    ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ๊ฒฝ์šฐ

    ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ๋Š” supportFragmentManager์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋Œ€์‹  parentFragmentManager์„ ์‚ฌ์šฉํ•ด์ฃผ์—ˆ๋‹ค. 

      binding!!.autoCompleteTv.setOnClickListener {
                val bottomSheet = ModalBottomSheet()
             
                bottomSheet.show(parentFragmentManager, ModalBottomSheet.TAG)
            }

     

    ๐Ÿค์ด์œ  ์ •๋ฆฌ 

    parentFragmentManager์€ ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์†ํ•œ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋งค๋‹ˆ์ €๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ์ค‘์ฒฉ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•˜๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค์–ด ํ•œ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋‚ด๋ถ€์—์„œ ๋‹ค๋ฅธ ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ,
    ์ฆ‰ ์šฐ๋ฆฌ ์ƒํ™ฉ์— ๋Œ€์ž…ํ•˜๋ฉด ํ˜„์žฌ ํŒ”๋กœ์ž‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ๋ฆฌ๋ทฐ๋งŒ ๋ณด์ด๋Š”  ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ๋ฐ”ํ…€ ์‹œํŠธ ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ , parentFragmentManager๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ๋ถ€๋ชจ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋งค๋‹ˆ์ €์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    supportFragmentManager๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ ์ฝ˜ํ…์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    6๏ธโƒฃFragmentManager๊ฐ€ ๋ญ์•ผ?

    ๊ทธ๋ ‡๋‹ค๋ฉด FragmentManger๋Š” ๋ฌด์—‡์ธ๊ฐ€ ์–ด๋–ค ์ผ์„ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ? ์ง€๊ธˆ๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž!

    FragmentManager๋Š” ์•ฑ ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ์ถ”๊ฐ€, ์‚ญ์ œ ๋˜๋Š” ๊ต์ฒดํ•˜๊ณ  ๋ฐฑ ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํด๋ž˜์Šค์ด๋‹ค.


    ์•Œ์•„๋ณผ๋‚ด์šฉ

    - FragmentManager์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•

    - ํ™œ๋™ ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ์™€ ๊ด€๋ จ๋œ FragmentManager์˜ ์—ญํ• 

    - FragmentManager๋กœ ๋ฐฑ์Šคํƒ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

    - ํ”„๋ž˜๊ทธ๋จผํŠธ์— ๋ฐ์ดํ„ฐ์™€ ์ข…์† ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•

     

     

     FragmentManager์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•

    ํ™œ๋™ ๋ฐ ํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ๋Š”  FragmentManager์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    1๏ธโƒฃ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ์•ก์„ธ์Šคํ•   ๊ฒฝ์šฐ

    getSupportFragmentManager( )๋ฅผ ํ†ตํ•ด FragmentManager์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    2๏ธโƒฃํ”„๋ž˜๊ทธ๋จผํŠธ์—์„œ ์•ก์„ธ์Šคํ•  ๊ฒฝ์šฐ 

    ํ”„๋ž˜๊ทธ๋จผํŠธ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•˜์œ„ ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋ž˜๊ทธ๋จผํŠธ ๋‚ด์—์„œ getChildFragmentManager()๋ฅผ ํ†ตํ•ด ํ”„๋ž˜๊ทธ๋จผํŠธ์˜ ํ•˜์œ„ ์š”์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” FragmentManager์˜ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    ๋งŒ์•ฝ ํ˜ธ์ŠคํŠธ FragmentManager์— ์•ก์„ธ์Šคํ•ด์•ผํ•œ๋‹ค๋ฉด getParentFragmentManager( )๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

     

    ๋‹ค์‹œ ๋งํ•ด์„œ ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ค‘์ฒฉ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ฆฌํ•˜์ž

     

    ๋ถ€๋ชจ ํ”„๋ž˜๊ทธ๋จผํŠธ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด getParentFragmentManager() ์ด์šฉ

    ์ž์‹ ํ”„๋ž˜๊ทธ๋จผํŠธ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด  getChildFragmentManager() ์ด์šฉ

     

     

     

    ๊ตฌํ˜„ํ•ด์•ผํ•  ๋‚ด์šฉ

    - ๋“œ๋กญ ๋‹ค์šด ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฐ”ํ…€ ์‹œํŠธ๊ฐ€ ๋œจ๋„๋ก ํ•˜๊ธฐ

     

    ๐Ÿ”น๋ฐ”ํ…€ ์‹œํŠธ์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํ•ด๋‹น ํ…์ŠคํŠธ๋ฅผ ๋“œ๋กญ ๋‹ค์šด ๋ฒ„ํŠผ ํ…์ŠคํŠธ์— ๋ฐ˜์˜ํ•˜๊ธฐ

    ์ฝœ๋ฐฑ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋‹ค.

    interface OnButtonSelectedListener {
        fun onButtonSelected(text: String)
    }
    class ModalBottomSheet : BottomSheetDialogFragment() {
        private var binding: FragmentBottomSheetBinding? = null
    
        var listener: OnButtonSelectedListener? = null

     

     

            binding!!.tvFirst.setOnClickListener {
                listener?.onButtonSelected(binding!!.tvFirst.text.toString())
            }
            binding!!.tvSecond.setOnClickListener {
                listener?.onButtonSelected(binding!!.tvSecond.text.toString())
            }
            binding!!.tvThird.setOnClickListener {
                listener?.onButtonSelected(binding!!.tvThird.text.toString())
            }

     

    ๐Ÿ”ฅ๋ฌธ์ œ 

    ํ˜„์žฌ ๋“œ๋กญ๋‹ค์šด ๋ฒ„ํŠผ์—์„œ ๋ณด์ด๋Š” text๋Š” editableํ•˜์˜€๋‹ค. 

     

    ๋ฐ”ํ…€ ์‹œํŠธ์—์„œ ํด๋ฆญ๋œ ๋ฒ„ํŠผ์˜ text๋ฅผ ๋ฐ”๋กœ ์ „๋‹ฌํ•˜๋ฉด editiableํ•œ ํƒ€์ž…๊ณผ text ํƒ€์ž…์ด ๋งž์ง€์•Š์•„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

    ๋”ฐ๋ผ์„œ ํด๋ฆญ๋œ ๋ฒ„ํŠผ์˜ text๋ฅผ editable ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋‹ค

    class ModalBottomSheet : BottomSheetDialogFragment() {
        private var binding: FragmentBottomSheetBinding? = null
    
        var listener: OnButtonSelectedListener? = null

     

     

        val bottomSheet = ModalBottomSheet()
                bottomSheet.listener =
                    object : OnButtonSelectedListener {
                        override fun onButtonSelected(text: String) {
                            val editable: Editable = Editable.Factory.getInstance().newEditable(text)
                            binding!!.autoCompleteTv.text = editable
                            bottomSheet.dismiss()
                        }
                    }

     

     

    ๐Ÿ”น ๋ฐ”ํ…€ ์‹œํŠธ์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ๋ฐ”ํ…€ ์‹œํŠธ ๋‹ซ๊ธฐ

    dismiss ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ฐ”ํ…€ ์‹œํŠธ๋ฅผ ๋‹ซ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    bottomSheet.dismiss()

    7๏ธโƒฃ์ข‹์•„์š”, ๋ถ๋งˆํฌ ์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ

    - ํด๋ฆญํ–ˆ์„ ๋•Œ ๋ฒ„ํŠผ ์ƒ‰๊น”์„  ๋“ฑ๋กํ•ด์ฃผ๊ธฐ

        <color name="clicked_button_text">#FF333F</color>
        <color name="clicked_button_background">#FFEBEC</color>
        <color name="clicked_button_stroke">#FF858C</color>

     

    - ํด๋ฆญ ์‹œ ๋ฐฐ๊ฒฝ์ƒ‰, ํ…Œ๋‘๋ฆฌ์ƒ‰, ๋ฒ„ํŠผ ํ…์ŠคํŠธ ์ƒ‰๊น”์„ ๋ณ€๊ฒฝํ•ด์ฃผ๊ธฐ 

    ํ˜„์žฌ๋Š” ๋จธํ‹ฐ๋ฆฌ์–ผ ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ์—ฌ๊ธฐ์„œ ๊ธฐ๋ณธ๊ฐ’์ด ๋ณด๋ผ์ƒ‰์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.

    ์šฐ๋ฆฌ ์•ฑ์—์„œ๋Š” ๋ถ‰์€์ƒ‰ ๋ฐฐ๊ฒฝ์ด ๋‚˜์™€์•ผํ•œ๋‹ค. ์ด๋ฅผ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋Š” ripple์ด๋‚˜ selector 

     

     

    - ์ข‹์•„์š” ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ์ข‹์•„์š” ๋“ฑ๋ก api ํ˜ธ์ถœํ•ด์ฃผ๊ธฐ 

      ๋ทฐ๋ชจ๋ธ์—์„œ ๋ฐ˜์˜

     

    - ๋ถ๋งˆํฌ ์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ ๋ถ๋งˆํฌ ์•„์ด์ฝ˜ ์ƒ‰ ๋ณ€๊ฒฝ

     

    ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์—์„œ ์—ฐ๋™ํ•ด์ค€๋‹ค. 

     

    - ๋ถ๋งˆํฌ ์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ ๋ถ๋งˆํฌ api ํ˜ธ์ถœ 

     

     

    8๏ธโƒฃ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ ๋‚ด๋ถ€์— ์žˆ๋Š” ``` ์•„์ด์ฝ˜ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•˜๊ธฐ 

     

    9๏ธโƒฃํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋‘ฅ๊ธ€๊ฒŒ ํ•˜๊ธฐ

    ShapeableImageView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ทฐ๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ (๋‚˜๋Š” ๋ชจ์„œ๋ฆฌ๊ฐ€ ๋‘ฅ๊ทผ ํ˜•ํƒœ)๋กœ ๊ทธ๋ ค์ค„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

     

    themes.xml ํŒŒ์ผ์—์„œ style์„ ์ •์˜ํ•ด์ฃผ๊ณ 

        <style name="Circle50">
            <item name="cornerSize">50%</item>
        </style>
        <style name="Circle10">
            <item name="cornerSize">10%</item>
        </style>

     

    ์ด๋ ‡๊ฒŒ shapeApperance ์†์„ฑ์œผ๋กœ style์„ ์ง€์ •ํ•ด์ฃผ๋ฉด 

               <com.google.android.material.imageview.ShapeableImageView
                    app:shapeAppearance="@style/Circle50"

    ์ด๋ ‡๊ฒŒ ๋‘ฅ๊ทผ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค!

     

    ๐Ÿ”Ž์•ฑ๋ฐ”์˜ ๊ฒ€์ƒ‰ ์•„์ด์ฝ˜ ํด๋ฆญ ์‹œ ๊ฒ€์ƒ‰ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๊ธฐ

       binding.toolBar.setOnMenuItemClickListener {
                when (it.itemId) {
                    R.id.search -> {
                        val intent = Intent(this, SearchActivity::class.java)
                        startActivity(intent)
                        true
                    }
                    R.id.notification -> {
                        true
                    }
                    else -> false
                }
            }

     

    ์ด๋ ‡๊ฒŒ intent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์—ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ ํ™”๋ฉด์ด  ์ด๋™ํ•˜์ง€ ์•Š์•˜๋‹ค ๐Ÿ˜ญ


    ํ™•์ธ ๊ฒฐ๊ณผ ํ•„์š”ํ•œ ์ผ์ด 2๊ฐ€์ง€ ์žˆ์—ˆ๋‹ค.

    1๏ธโƒฃ์šฐ์„  ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ๊ฒ€์ƒ‰ํ™”๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋“ฑ๋ก

    2๏ธโƒฃํˆด๋ฐ”๋ฅผ ์•ฑ๋ฐ”๋กœ ์„ค์ •

     

    ์šฐ์„  ๋ฉ”๋‹ˆํŽ˜์ŠคํŠธ์— ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์—ˆ๋‹ค.

            <activity android:name=".ui.search.SearchActivity"/>

    ํˆด๋ฐ”๋ฅผ ์ ์šฉํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

    ์ด ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๊ธ€๋กœ ์ •๋ฆฌํ•ด๋‘์—ˆ๋‹ค!

     

    Android UI : Toolbar ์•ฑ ๋ฐ” ์ ์šฉํ•ด์ฃผ๊ธฐ

    ๋“ค์–ด๊ฐ€๊ธฐ ์ „์— ๋ฉ”์ธ ํ™”๋ฉด์—์„œ ์•ฑ๋ฐ”์— ์•ฑ ๋กœ๊ณ ์™€ ๊ฒ€์ƒ‰, ์•Œ๋ฆผ ์•„์ด์ฝ˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๋‚˜๋Š” xml ํŒŒ์ผ์—์„œ Toolbar ์œ„์ ฏ ์ถ”๊ฐ€๋ฅผ ํ†ตํ•ด UI์—์„œ ์•ฑ๋ฐ”๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ ‡๊ฒŒ๋งŒ ํ•˜๋ฉด ์•ฑ๋ฐ”

    hyeonhahaha.tistory.com

     

    728x90