๋ชฉ์ฐจ
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"/>
ํด๋ฐ๋ฅผ ์ ์ฉํด์ฃผ๋ ๋ฐฉ๋ฒ
์ด ๋ถ๋ถ์ ๋ฐ๋ก ๊ธ๋ก ์ ๋ฆฌํด๋์๋ค!
'๐ค2024 ์๋๋ก์ด๋ > ๐ฟ ์ํ ํ๋ก์ ํธ ๊ฐ๋ฐ ์ผ์ง' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android UI : Toolbar ์ฑ ๋ฐ ์ ์ฉํด์ฃผ๊ธฐ (1) | 2024.04.07 |
---|---|
๊ฒ์ ํ๋ฉด ๊ตฌํ ๊ณผ์ ์ ๋ฆฌ (0) | 2024.04.07 |
Android : ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ ์ ๋ฆฌ (0) | 2024.03.27 |
Android ๋ ์ด์์ ๊ณต์๋ฌธ์ ์ ๋ฆฌ (2) | 2024.03.27 |
Android : ์ด๊ธฐํ ๋ก์ง์ ๋ด๋ "App StartUp ๋ผ์ด๋ธ๋ฌ๋ฆฌ" ์์๋ณด๊ธฐ (0) | 2024.03.26 |