[Kotlin] 안드로이드 기초 - Pathway 3,4
https://developer.android.com/courses/android-basics-kotlin/unit-1
Android Kotlin Basics in Kotlin | Android Basics in Kotlin - Intro
Build your first Android apps with the Kotlin programming language.
developer.android.com
Pathway 3
1. HappyBirthdayApp 만들기
- 멋진 앱의 조건 -> 효과적, 효율성, 간결성, 접근성, 미관 -> 이것들을 위해 설정할 나의 조건과 구상
2. 간단이론과 실행 //이전의 NewProject 설명 참조
- UI = 사용자 인터페이스 정보 //앱과 사용자 사이의 상호작용
- Views / ViewsGroups : Views = 클릭버튼 or 수정가능 입력란 / ViewGroup = Views를 정렬 or 조정 ex)ConstraintLayout
- TextView 설정
3. Layout Editor
- main -> java -> ... -> MainActivity 더블클릭
- 여기서부터 한글폰트 적용에 한계를 깨닫고 영어로 변경 ㅠ_^
4. 이미지 추가
- Resource Manager에서 Import images
- 이후 그 이미지를 드래그해서 옮겨놓고 background를 찾아 배경으로 선택
Pathway 4
1. DiceRoller
- 변수와 함수를 사용해 결과 도출
- Dice 클래스 생성
- 클래스의 객체를 만들고 변수를 수정 -> 메서드 호출
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides) //sides 수 출력
myFirstDice.roll()
}
class Dice { //Dice 클래스
var sides = 6 //주사위 면 수
fun roll() {
val randomNumber = (1..6).random() //val diceRange : IntRange로 해석
println(randomNumber)
}
}
- 주사위 굴리기 값 반환
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber //이부분 수정
}
- 주사위 면 수 변경
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll() //추가
println("당신의 ${myFirstDice.sides} 면 주사위 수는 ${diceRoll}입니다!")
myFirstDice.sides = 20
println("당신의 ${myFirstDice.sides} 면 주사위 수는 ${diceRoll}입니다!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..sides).random() //면 수로 수정
return randomNumber
}
}
- 첫 번째는 6주사위, 두 번째는 20주사위
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("당신의 ${myFirstDice.sides} 면 주사위 수는 ${diceRoll}입니다!")
val mySecondDice = Dice(20)
println("당신의 ${mySecondDice.numSides} 면 주사위 수는 ${diceRoll}입니다!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
- 코드 리팩터링
fun main() {
val myFirstDice = Dice(6)
println("당신의 ${myFirstDice.sides} 면 주사위 수는 ${diceRoll}입니다!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} 면 주사위 수는 ${diceRoll}입니다!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random() //리턴으로 변경
}
}
2. 프로젝트 생성
- 이전과 같이 프로젝트를 생성하고 버튼 추가
- Common에 위치한 Button을 아래로 끌어 ConstraintLayout에 추가 // 여기서도 Constraint 추가
- Roll으로 이름변경
- 텍스트 부분 변경 //Common Attributes에서 도구 아이콘 text에 1을 넣었는ㄷ데 암것도 안나옴 !
- 에뮬레이터 실행한 모습
*Auto import
- 자동 import : windows에서 File>other settings>검색창에서 auto import 검색> java섹션의 Add unambiguous imports on the fly 및 Optimize imports on the fly (for current project)가 선택 > 끝 !!
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button) // 객체참조 저장
rollButton.setOnClickListener {
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT) // 클릭시 메시지 표시
toast.show()
}
}
}
- 텍스트 뷰 6으로 추가
- Dice 클래스 추가
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
class Dice(private val numSides: Int) { //numsides는 이 클래스에서만 액세스 가능
fun roll(): Int {
return (1..numSides).random()
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button)
rollButton.setOnClickListener {
rollDice()
}
}
private fun rollDice() {
val dice = Dice(6)
val diceRoll = dice.roll()
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = diceRoll.toString()
}
}
-> 최종 랜덤으로 숫자 내 뽑는 코드
3. 이미지 추가
- Button 추가와 마찬가지로 이미지를 추가하고 constraint를 걸어줌
- 위와 같은 화면에서 Drawable 위의 +를 클릭>import drawable 선택하여 파일 추가
- 랜덤으로 바뀌는 숫자에 따라 이미지 변경할 코드
private fun rollDice() {
val dice = Dice(6)
val diceRoll = dice.roll()
val diceImage: ImageView = findViewById(R.id.imageView)
val drawableResource = when (diceRoll) { //할 때
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6 //표시
}
diceImage.setImageResource(drawableResource)
}
// if 대신에 when으로 조건문 대신
//왜 ㅜㅜ 대체 중간부분부분 빼먹은진 몰라도 .. 다시 추가해서 업로드했습니다 ㅜㅜㅜㅜㅜㅜㅜㅜ