*위젯 사용예제-라디오버튼, 체크박스, 프로그래스바
-activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="선택값"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView">
<RadioButton
android:id="@+id/radioApple"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사과"
android:textSize="24sp" />
<RadioButton
android:id="@+id/radioBanana"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="바나나"
android:textSize="24sp" />
<RadioButton
android:id="@+id/radioOrange"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="오렌지"
android:textSize="24sp" />
</RadioGroup>
</androidx.constraintlayout.widget.ConstraintLayout>
-build.gradle
buildFeatures {
viewBinding true
}
-MainActivity.kt
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.radioGroup.setOnCheckedChangeListener { group, checkedId ->
when(checkedId) {
R.id.radioApple -> binding.textView.text = "사과"
R.id.radioBanana -> binding.textView.text = "바나나"
R.id.radioOrange -> binding.textView.text = "오렌지"
}
}
}
}
-activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="결과"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginLeft="1dp"
android:layout_marginTop="24dp"
android:layout_marginEnd="1dp"
android:layout_marginRight="1dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView">
<CheckBox
android:id="@+id/checkApple"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="사과" />
<CheckBox
android:id="@+id/checkBanana"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="바나나" />
<CheckBox
android:id="@+id/checkOrange"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="오렌지" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
-build.gradle
buildFeatures {
viewBinding true
}
-MainActivity.kt
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
//false를 기본값으로 가지고 있는 변수 생성
var apple = false
var banana = false
var orange = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.checkApple.setOnCheckedChangeListener { buttonView, isChecked ->
apple = isChecked
printCheckedItems()
}
binding.checkBanana.setOnCheckedChangeListener { buttonView, isChecked ->
banana = isChecked
printCheckedItems()
}
binding.checkOrange.setOnCheckedChangeListener { buttonView, isChecked ->
orange = isChecked
printCheckedItems()
}
}
//함수 printCheckedItems()를 생성하고 변수 result의 최종 결과 값이 텍스트뷰에 출력
//앞에서 생성한 false를 기본값으로 가지고 있는 변수들을 이용해 작성
//사과의 리스너 코드 중 apple = isChecked 가 되었을 때 함수 printCheckedItems() 실행
//apple의 값이 true가 된 상태에서 printCheckedItems()로 넘어와 조건식을 실행 시켰으므로
//if (apple) result = " 사과" 는 만약 apple의 값이 선택(true)되었다면 result에는 "사과" 라는 문자열 기입
//만약 사과와 바나나를 선택했을 때
//if (apple) result = " 사과" 조건식으로 빈 값이었던 result는 " 사과"의 문자열을 가지게 됨
//그리고 바나나 조건식을 보면 바나나가 선택되었을 떄 result의 값이 현재 빈 값이 아니면 result값 뒤에 "와" 를 붙임(+=)
//if (result.isNotEmpty()) result += "와" result += " 바나나" 를 차례대로 result에 붙임
//이렇게 조건식을 거쳐 textView에는 result적용 : "${result}" 형식으로 출력되게 작성
fun printCheckedItems() {
var result = ""
if (apple) result = " 사과"
if (banana) {
if (result.isNotEmpty()) result += "와"
result += " 바나나"
}
if (orange) {
if (result.isNotEmpty()) result += "와"
result += " 오렌지"
}
binding.textView.text = "${result}가 선택되었습니다."
}
}
-activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/progressLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="36sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
-build.gradle
buildFeatures {
viewBinding true
}
-MainActivity.kt
class MainActivity : AppCompatActivity() {
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
//백그라운드 스레드 생성 thread(start=true) {}
//for함수를 이용해 i가 0부터 100 될 때까지 조건식 반복
//Thread.sleep(1000) 를 사용해 1000밀리초(1초) 뒤 다음 코드 실행
//runOnUiThread {} 를 사용해 메인스레드에서 UI관련 코드가 실행될 수 있도록 함
//i의 값이 1씩 증가하도록 작성 binding.textView.text = "${i+1}"
thread(start=true) {
for (i in 0 until 100) {
Thread.sleep(1000)
runOnUiThread {
binding.textView.text = "${i+1}"
}
}
}
}
}
이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.
'Android App > Kotlin' 카테고리의 다른 글
4대 메이저 컴포넌트-Activity, Broadcast Receiver, Service, Content Provider (0) | 2022.11.09 |
---|---|
뷰 바인딩(View Binding) (0) | 2022.11.04 |
위젯-RatingBar (0) | 2022.11.03 |
위젯-SeekBar (0) | 2022.11.03 |
위젯-ProgressBar (0) | 2022.11.03 |