카테고리 없음

[Kotlin] 안드로이드 기초 - Pathway 3,4

냉냐리 2021. 10. 10. 14:23

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 더블클릭

레이아웃 에디터를 실행한 모습

 

1차 시도

- 여기서부터 한글폰트 적용에 한계를 깨닫고 영어로 변경 ㅠ_^

두근두근
ㅎㅎ

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으로 이름변경

fix 누르고 고정

- 텍스트 부분 변경 //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으로 조건문 대신

 

 

 

//왜 ㅜㅜ 대체 중간부분부분 빼먹은진 몰라도 .. 다시 추가해서 업로드했습니다 ㅜㅜㅜㅜㅜㅜㅜㅜ