ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
ํ๋ฉด์ ์ถ๋ ฅํ๋ ์ปดํฌ๋ํธ : ์กํฐ๋นํฐ
ํ๋ฉด์ ๋ด์ฉ์ ํ์ํ๋ ํด๋์ค : ๋ทฐ ํด๋์ค(TextView, ImageView ๋ฑ)
-> ์กํฐ๋นํฐ๊ฐ ์คํ๋๋ฉด์ ๋ทฐ ํด๋์ค๋ฅผ ์ด์ฉํด ํ๋ฉด์ ๊ตฌ์ฑํ๊ณ ์ด๋ฅผ ๊ธฐ๊ธฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๊ตฌ์กฐ
1) ์กํฐ๋นํฐ ์ฝ๋๋ก ์์ฑ
ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ทฐ ํด๋์ค๋ฅผ ์กํฐ๋นํฐ ์ฝ๋์์ ์ง์ ์์ฑ -> XML ํ์ผ์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ์์ฑ X
2) ๋ ์ด์์ XML ํ์ผ๋ก ์์ฑ
ํ๋ฉด์ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ ๋ทฐ๋ฅผ XML์ ํ๊ทธ๋ก ๋ช ์ํด ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
XML์์ ํ๋ฉด์ ๊ตฌํํ๋ฏ๋ก ์กํฐ๋นํฐ ์ฝ๋์์๋ ํ๋ฉด์ ์ถ๋ ฅํ๋ setContentView() ํจ์๋ง ํธ์ถํ๋ฉด์ XML ํ์ผ์ ์ ๋ฌํ๋ฉด ๋๋ค.
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?){
super.onCreate(savedInstanceState)
// ํ๋ฉด ์ถ๋ ฅ XML ๋ช
์
setContentView(R.layout.activity_main)
}
}
ํจ์จ์ฑ์ ๊ณ ๋ คํ๋ค๋ฉด XML ํ์ผ๋ก ํ๋ฉด์ ๊ตฌํํ๋ ๊ฒ์ด ๋ ์ข๋ค. ํ๋ฉด ๊ตฌํ์ XML๋ก ๋ถ๋ฆฌํ๊ณ , ์กํฐ๋นํฐ์์๋ ๋คํธ์ํน, ๋ฐ์ดํฐ ํธ๋ค๋ง, ์ฌ์ฉ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฑ์ ์ฝ๋๋ง ์์ฑํ๋ ๊ฒ์ด ๋ ํจ์จ์ .
๋ทฐ ํด๋์ค
๋ทฐ ๊ฐ์ฒด์ ๊ณ์ธต ๊ตฌ์กฐ
์กํฐ๋นํฐ ํ๋ฉด์ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํ๋ ํด๋์ค๋ ๋ชจ๋ View์ ํ์ ํด๋์ค -> ํ๋ฉด ๊ตฌ์ฑ๊ณผ ๊ด๋ จ๋ ํด๋์ค๋ฅผ ํต์นญํ์ฌ ๋ทฐ ํด๋์ค๋ผ๊ณ ํจ.
1) View : ๋ชจ๋ ๋ทฐ ํด๋์ค์ ์ต์์ ํด๋์ค. ์กํฐ๋นํฐ๋ View์ ์๋ธ ํด๋์ค๋ง ํ๋ฉด์ ์ถ๋ ฅ
2) ViewGroup : View์ ํ์ ํด๋์ค์ง๋ง ์์ฒด UI๋ ์์ด์ ํ๋ฉด์ ์ถ๋ ฅํด๋ ์๋ฌด๊ฒ๋ ๋์ค์ง ์๋๋ค. ์ผ์ข ์ ์ปจํ ์ด๋์ ๋น์ทํ ์ญํ ์ ํ๋ฉฐ, ์ค์ ๋ก๋ ViewGroup์ ์๋ธ ํด๋์ค์ธ ๋ ์ด์์ ํด๋์ค๋ฅผ ์ฌ์ฉ
* ๋ ์ด์์ ํด๋์ค : ๋ค๋ฅธ ๋ทฐ ๊ฐ์ฒด ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ด์์ ํ๊บผ๋ฒ์ ์ ์ดํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
3) TextView : ํน์ UI๋ฅผ ์ถ๋ ฅํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค. ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ ๋ทฐ
๋ ์ด์์ ์ค์ฒฉ
๋ ์ด์์ ๊ฐ์ฒด๋ฅผ ์ค์ฒฉํ์ฌ ๋ทฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด์ฒ๋ผ ๊ฐ์ฒด๋ฅผ ๊ณ์ธต ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ์ด์ฉํ๋ ํจํด์ ์ปดํฌ์งํธ ํจํด(composite pattern) ๋๋ ๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ(document object model)์ด๋ผ๊ณ ํ๋ค.
๋ ์ด์์ XML์ ๋ทฐ๋ฅผ ์ฝ๋์์ ์ฌ์ฉํ๊ธฐ
id ์์ฑ์ ์ฌ์ฉํ์ฌ ์๋ณ์๋ฅผ ๋ถ์ฌํ๊ณ ๊ทธ ์๋ณ์๋ก ๊ฐ์ฒด๋ฅผ ์ป์ด์์ผ ํ๋ค. id๋ ๊ผญ ์ง์ ํด์ผ ํ๋ ์์ฑ์ ์๋๋ฉฐ ๋ ์ด์์ XML์ ์ ์ธํ ๋ทฐ๋ฅผ ๊ตฌ๋ณํ ํ์๊ฐ ์์ ๋๋ ์๋ตํด๋ ๋๋ค.
<TextView android:id="@+id/text1" /> // id ๊ฐ : text1
- id ๊ฐ์ ์ฑ์์ ์ ์ผํด์ผ ํ๋ค.
- XML์ id ์์ฑ์ ์ถ๊ฐํ๋ฉด ์๋์ผ๋ก R.java ํ์ผ์ ์์ ๋ณ์๋ก ์ถ๊ฐ
- XML ์์ฑ๊ฐ์ด @๋ก ์์ํ๋ฉด R.java ํ์ผ์ ์๋ฏธ
// XML ํ๋ฉด ์ถ๋ ฅ
setContentView(R.layout.activity_main)
// id๊ฐ์ผ๋ก ๋ทฐ ๊ฐ์ฒด ํ๋
val textView1: TextView = findViewById(R.id.text1)
- setContentView() : ์กํฐ๋นํฐ์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ํจ์. ์ด ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ๋ง์ผ๋ก๋ XML์ ๋ด์ฉ์ด ์กํฐ๋นํฐ ํ๋ฉด์ ์ถ๋ ฅ
๋ทฐ์ ํฌ๊ธฐ ์ง์
layout_width, layout_height ์์ฑ์ ์ด์ฉํ์ฌ ์ผ๋ง๋งํผ์ ํฌ๊ธฐ๋ก ํ๋ฉด์ View๋ฅผ ์ถ๋ ฅํ ๊ฒ์ธ์ง๋ฅผ ์ง์ .
1) ์์น
2) match_parent : ์์ ๊ณ์ธต์ ํฌ๊ธฐ
3) wrap_content : ์์ ์ ์ฝํ ์ธ ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ ์ ์๋ ์ ์ ํ ํฌ๊ธฐ
-> ์ผ๋ฐ์ ์ผ๋ก ์๋๋ก์ด๋ ๊ธฐ๊ธฐ์ ํธํ์ฑ์ ์ํด match_parent๋ wrap_content๋ฅผ ์ฌ์ฉํ๋ค.
๋ทฐ์ ๊ฐ๊ฒฉ ์ค์
1) margin : ๋ทฐ์ ๋ทฐ ์ฌ์ด์ ๊ฐ๊ฒฉ
2) padding : ๋ทฐ์ ์ฝํ ์ธ ์ ํ ๋๋ฆฌ ์ฌ์ด์ ๊ฐ๊ฒฉ
-> margin, padding ์์ฑ์ ์ด์ฉํ๋ฉด ๊ฐ๊ฒฉ์ด ๋ค ๋ฐฉํฅ ๋ชจ๋ ๊ฐ์ ํฌ๊ธฐ๋ก ์ค์ ! ํน์ ํ ํ ๋ฐฉํฅ์ ๊ฐ๊ฒฉ๋ง ์ค์ ํ๊ณ ์ถ๋ค๋ฉด paddingLeft/Right/Top/Bottom๊ณผ Layout_marginLeft/Right/Top/Bottom ์์ฑ์ ์ด์ฉ.
๋ทฐ์ ํ์ ์ฌ๋ถ ์ค์ (visibility ์์ฑ)
1) visible(default) : ๋ทฐ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ
2) invisible : ๋ทฐ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋์ง ์๊ณ ์๋ฆฌ๋ฅผ ์ฐจ์ง
3) gone : ๋ทฐ๊ฐ ํ๋ฉด์ ์ถ๋ ฅ๋์ง ์๊ณ ์๋ฆฌ ์ฐจ์ง X - ์ฒ์์๋ ํ๋ฉด์ ๋ณด์ด์ง ์๋ค๊ฐ ์ด๋ค ์๊ฐ์ด ๋๋ฉด ๋ณด์ด๊ฒ ์ฒ๋ฆฌ
android:visibility="invisible"
- ์ฝ๋์์ ๋ทฐ์ visibility ์์ฑ ์กฐ์ ํ๋ ๋ฐฉ๋ฒ : ๋ทฐ์ visibility ์์ฑ์ View.VISIBLE / View.INVISIBLE๋ก ์ค์
visibleBtn.setOnClickListener {
targetView.visibility = View.VISIBLE
}
* setVisibility๋ฅผ ํธ์ถํ์ง ์๋ ์ด์ ๋?
์ฝํ๋ฆฐ์ ์๋ฐ์ ๋ค๋ฅด๊ฒ field๊ฐ ์๋๋ผ property! ์ฆ, ๋ณ์์ getter/setter๊ฐ ๋ด์ฅ๋์ด ์๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ทฐ ์ดํด๋ณด๊ธฐ
ํ ์คํธ ๋ทฐ : ๋ฌธ์์ด์ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ทฐ
- android:text : TextView์ ์ถ๋ ฅํ ๋ฌธ์์ด/๋ฌธ์์ด ๋ฆฌ์์ค ์ง์
- android:textColor : ๋ฌธ์์ด์ ์์ ์ง์ (16์ง์ RGB ํ์)
- android:textSize : ๋ฌธ์์ด์ ํฌ๊ธฐ ์ง์ (์ซ์ ์ฌ์ฉ, ๋จ์ ์๋ต ๋ถ๊ฐ) - ๋จ์๋ px, dp, sp ๋ฑ์ ์ฌ์ฉ
- android:textStyle : ๋ฌธ์์ด์ ์คํ์ผ์ ์ง์ (bold, italic, normal ์ค์์ ์ ํ)
- android:autoLink : TextView์ ์ถ๋ ฅํ ๋ฌธ์์ด์ ๋ถ์ํด ํน์ ํํ์ ๋ฌธ์์ด์ ์๋ ๋งํฌ๋ฅผ ์ถ๊ฐ(web, phone, email)
- android:maxLines : ๋ฌธ์์ด์ด ํน์ ์ค๊น์ง๋ง ๋์ค๋๋ก ํ๋ ํจ์
- android:ellipsize : maxLines ์์ฑ์ ์ด์ฉํ ๋ ์ถ๋ ฅ๋์ง ์์ ๋ฌธ์์ด์ด ๋ ์๋ค๋ ๊ฒ์ ํ์(start, middle, end)
- start, middle์ ๊ฒฝ์ฐ singleLine = "true" ์์ฑ์ผ๋ก ๋ฌธ์์ด์ ํ ์ค๋ก ์ถ๋ ฅํ์ ๋๋ง ์ ์ฉ
์ด๋ฏธ์ง ๋ทฐ : ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ทฐ
- android:src : ImageView์ ์ถ๋ ฅํ ์ด๋ฏธ์ง๋ฅผ ์ค์ (๋ฆฌ์์ค ์ด๋ฏธ์ง, ํ์ผ ์ด๋ฏธ์ง, ๋คํธ์ํฌ ์ด๋ฏธ์ง ๋ฑ)
- android:maxWidth, maxHeight, adjustViewBounds ์์ฑ : ImageView๊ฐ ์ถ๋ ฅํ๋ ์ด๋ฏธ์ง์ ์ต๋ ํฌ๊ธฐ ์ง์
- maxWidth, maxHeight ์์ฑ์ adjustViewBounds์ ํจ๊ป ์ฌ์ฉํด์ผ ํจ.
- ์์ฑ๊ฐ์ true๋ก ์ค์ ํ ๊ฒฝ์ฐ, ์ด๋ฏธ์ง์ ๊ฐ๋ก์ธ๋ก ๊ธธ์ด์ ๋น๋กํด ๋ทฐ์ ํฌ๊ธฐ๋ฅผ ๋ง์ถค
- ์ด๋ฏธ์ง ํฌ๊ธฐ๋ ๊ฐ๋ก์ธ๋ก ๋น์จ์ด ๋ค์ํ๋ค๋ฉด ๋ทฐ์ ํฌ๊ธฐ๊ฐ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ณด๋ค ์ปค์ง ์ ์๊ธฐ ๋๋ฌธ์ layout_width, layout_height ์์ฑ์ ์ซ์๋ฅผ ์ง์ ํ์ง ์๋๋ค!
๋ฒํผ, ์ฒดํฌ๋ฐ์ค, ๋ผ๋์ค ๋ฒํผ
1) Button : ์ฌ์ฉ์ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌ
2) CheckBox : ๋ค์ค ์ ํ
3) RadioButton : ๋จ์ผ ์ ํ์ ์ ๊ณต
-> RadioGroup๊ณผ ํจ๊ผ ์ฌ์ฉํ๋ฉฐ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๋ผ๋์ค ๋ฒํผ ์ค ํ๋๋ง ์ ํ ๊ฐ๋ฅ
์๋ํธ ํ ์คํธ : ์ฌ์ฉ์๊ฐ ๊ธ์ ์ ๋ ฅํ ์ ์๋ ๋ทฐ
- android:lines : ์ฒ์๋ถํฐ ์ฌ๋ฌ ์ค ์ ๋ ฅ ํฌ๊ธฐ๋ก ๋์ค๊ฒ ํ๋ ์์ฑ
- android:maxLines : ์ฒ์์๋ ํ ์ค ํฌ๊ธฐ๋ก ์ถ๋ ฅ, ์ํฐ๋ฅผ ๋๋ ์ ๋ ์ต๋ ๋ช ์ค๊น์ง ๋์ด๋ ๊ฒ์ธ์ง๋ฅผ ์ ํจ
- android:inputType : EditText์ ๊ธ์ ์ ๋ ฅํ ๋ ์ฌ๋ผ์ค๋ ํค๋ณด๋๋ฅผ ์ง์ ํ๋ ์์ฑ
๋ทฐ ๋ฐ์ธ๋ฉ
๋ ์ด์์ XML ํ์ผ์ ์ ์ธํ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์ฝ๋์์ ์ฝ๊ฒ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
1) gradle ํ์ผ์ ๋ค์์ฒ๋ผ ์ ์ธ
android {
(...์๋ต...)
buildFeatures {
viewBinding = true
}
}
-> ๋ ์ด์์ XML ํ์ผ์ ๋ฑ๋ก๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ํฌํจํ๋ ํด๋์ค๊ฐ ์๋์ผ๋ก ์์ฑ. ์ฆ, ์ฐ๋ฆฌ๊ฐ ์ง์ ์ฝ๋์์ ๋ทฐ๋ฅผ ์ ์ธํ๊ณ findByViewById() ํจ์๋ฅผ ํธ์ถํ์ง ์์๋ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ฏ๋ก ์ด ํด๋์ค๋ฅผ ์ด์ฉํด ๋ทฐ๋ฅผ ์ฌ์ฉ
2) ํด๋์ค ์๋ ์์ฑ
ex) activity_main.xml -> ActivityMainBinding
3) ๋ฐ์ธ๋ฉ ๊ฐ์ฒด ํ๋
// ๋ฐ์ธ๋ฉ ๊ฐ์ฒด ํ๋
val binding = ActivityMainBinding.inflate(layoutInflater)
// ์กํฐ๋นํฐ ํ๋ฉด ์ถ๋ ฅ
setContentView(binding.root)
// ๋ทฐ ๊ฐ์ฒด ์ด์ฉ
binding.visibleBtn.setOnClickListener { ... }
+a) ํน์ ๋ ์ด์์ XML ํ์ผ์ ๋ฐ์ธ๋ฉ ํด๋์ค๋ก ๋ง๋ค๊ณ ์ถ์ง ์์ ๋ : XML ํ์ผ์ ๋ฃจํธ ํ๊ทธ์ ์๋ ์์ฑ ์ถ๊ฐ
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
(์๋ต)
tools:viewBindingIgnore="true">
'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Chap 5] ์ฝํ๋ฆฐ์ ์ ์ฉํ ๊ธฐ๋ฒ (0) | 2021.11.23 |
---|---|
[Chap 4] ์ฝํ๋ฆฐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ (0) | 2021.11.20 |
[Chap 3] ์ฝํ๋ฆฐ ์์ํ๊ธฐ (0) | 2021.11.19 |
[Chap 2] ์๋๋ก์ด๋ ์ฑ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ (0) | 2021.11.17 |
[Chap 1] ์๋๋ก์ด๋ ์คํ๋์ค ์ค์น ๊ณผ์ ์์ ์ฃผ์ ์ฃผ์ (0) | 2021.11.09 |
๋๊ธ