반응형

코틀린으로 안드로이드 개발 시 layout에 Activity_main.xml을 인식 못하는 오류가 발생했습니다.

소스에는 activity_main.xml이 존재하지만 찾을 수 없다는 오류가 출력됩니다.

Unresolved reference: activity_main 

이건 뭐여.

옵션 설정을 변경해도 동일한 에러가 계속 발생해서 구글링 해보니까.

import android.R 이 문제였습니다.

android.R이 import되면서 다른 내용을 찾고 있는 것으로 생각됩니다.

import android.R을 삭제하면 정상적으로 Activity_main을 확인할 수 있습니다.

 

반응형
반응형

오늘은 코틀린을 사용해서 안드로이드 인트로 화면을 만들어 보겠습니다.

코틀린 안드로이드 인트로

기본적인 인트로 화면으로 이미지를 추가해서 전환하는 방식으로 코드를 진행하겠습니다.

코틀린 안드로이드 인트로

먼저 안드로이드 스튜디오 및 IntelliJ을 사용해서 안드로이드 컴파일할 수 있는 환경을 구성해주세요.

전 유료 버전인 IntelliJ를 사용해보겠습니다.

안드로이드 스튜디오 개발 회사에서 만든 툴이기 때문에 비슷한 부분이 많이 있습니다.

먼저 "Empty Activity" 프로젝트를 생성해줍니다.

코틀린 안드로이드 인트로

안드로이드 인트로화면은 Activity를 호출해주는 방식이기 때문에 먼저 IntroActivity를 생성해줍니다.

이번에는 안드로이드 인트로에 사용할 이미지를 등록해주세요.

drawable 폴더에서 우클릭을 사용해서 Explorer을 오픈해서 이미지를 복사하면 자동으로 drawable 하위에 이미지가 등록됩니다.

코틀린 안드로이드 인트로

등록된 이미지를 클릭하면 확인할 수 있습니다.

코틀린 안드로이드 인트로

처음에 신규로 생성한 introlActivity.kt 파일을 클릭해서 코드를 입력해주세요.

class introlActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_introl)

        var handler = Handler()
        handler.postDelayed( {
            var intent = Intent( this, MainActivity::class.java)
            startActivity(intent)
        }, 3000)
    }

    override fun onPause() {
        super.onPause()
        finish()
    }
}

Intent를 사용해서 MainActivity를 3초 후에 이동하는 코드입니다.

onPause가 호출되면서 대기상태일 때 introActivity는 종료시키는 코드도 추가해주세요.

 

 

 

코틀린 안드로이드 인트로

인트로 레이아웃은 ImageView를 사용해서 고정시켜줍니다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".introlActivity">

    <ImageView
            android:id="@+id/introlImg"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="fitXY"
            android:src="@drawable/moon"
    />

</androidx.constraintlayout.widget.ConstraintLayout>

마지막으로 등록된 메인 Activity 정보를 변경해줍니다.

코틀린 안드로이드 인트로

AndroidManifest.xml에서 MainActivity와 .introlActivity를 바꿔주면 IntrolActivity가 먼저 호출되면서

3초 후 MainActivity가 호출됩니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.p365language">

    <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
        </activity>
        <activity android:name=".introlActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

정상적으로 코딩되었다면 빌드해주세요.

코틀린 안드로이드 인트로

인트로로 설정된 Activity가 먼저 호출되는 것을 확인할 수 있습니다.

코틀린 안드로이드 인트로

3초 후 메인화면으로 이동합니다.

인트로 화면은 앱 실행과 동시에 사용자에게 가장 큰 기대를 줄 수 있는 중요한 내용입니다.

안드로이드 인트로 화면을 사용해서 앱을 더욱더 멋지게 개발해보세요.

감사합니다.

반응형
반응형

Toast는 안드로이드에서 메시지를 출력하기 위한 함수입니다.

오늘은 코틀린에서 Toast 사용법을 알아보겠습니다.

Toast를 사용하기 전에 먼저 버튼을 추가해주세요.

안드로이드에서 빈 프로젝트를 생성하고 layout에서 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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="20dp"
        android:orientation="horizontal">
        <Button
            android:id="@+id/btn_Toast"
            android:text="POP Toast"
            android:textAllCaps="false"
            android:padding="20dp"
            android:textSize="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

코드 내용은 간단하게 중앙에 버튼을 배치하기 위한 내용입니다.

출력 결과 중앙에 버튼을 확인할 수 있습니다.

이제 메시지를 출력하기 위해서 Toast를 사용해보겠습니다.

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        var btnToast : Button = findViewById(R.id.btn_Toast)

        btnToast.setOnClickListener{
            Toast.makeText(this, "Toast Start", Toast.LENGTH_SHORT).show()
        }
    }
}

MainActivity.kt에서 버튼에 클릭 이벤트를 연결합니다.

Toast 출력은 Toast.LENGTH_SHORT를 사용해서 짧게 출력합니다.

"POP Toast" 버튼을 클릭하면 아래쪽에 "Toast Start" 메시지를 확인할 수 있습니다.

 var btnToast : Button = findViewById(R.id.btn_Toast)

        btnToast.setOnClickListener{
            Toast.makeText(this, "Toast Start", Toast.LENGTH_LONG).show()
        }

Toast 타입을 Toadt.LENGTH_LONG로 설정합니다.

메시지 출력이 조금 더 길게 출력됩니다.

Toast는 LENGTH_SHORT일 경우는 2~3초 출력하고, LENGTH_LONG일 경우는 5초 정도 출력합니다.

안드로이드 코딩 시 Log를 사용하는 방법도 있지만, 다양한 출력을 사용자에게 인지 시켜주기 위해서는 Toast를 많이 사용합니다.

감사합니다.

반응형
반응형

오늘은 코틀린에서 가변 인자를 사용하고 싶을 경우 어떻게 사용해야 하는지 알아보겠습니다.

함수를 사용할 경우 고정된 파라미터를 사용하기도 하지만 가변적인 배열을 사용하고 싶은 경우도 있습니다.

코틀린에서는 이런 경우 vararg를 사용해서 배열을 정의합니다.

    fun IntMax(vararg numbers:Int):String
    {
        val sum = numbers.max()
        return sum.toString()
    }
    
    val rString = IntMax(2,4,7,9,10,15)
    Toast.makeText(this, rString, Toast.LENGTH_SHORT).show()

vararg 를 선언하게 되면 파라미터가 배열러 인식됩니다.

아규먼트(argument) 2, 4, 7, 9, 10, 15를 입력하면 MAX 항목인 15를 리턴합니다.

출력시 15를 확인할 수 있습니다.

INT 형태 배열을 사용해서 INT 가변 인자를 확인 할 수 있습니다.

그럼 이번에는 String을 사용해보겠습니다.

    fun StringAll( vararg StringList:String):String{
        val rText = StringList.joinToString()
        return rText
    }
    
    val rString = StringAll("A","S","D", "H", "I")
    Toast.makeText(this.application, rString, Toast.LENGTH_SHORT).show()

StringAll 함수는 파라미터(parameter) StringList를 vararg로 선언했습니다.

함수 내부에서 String 배열을 확인해서 입력된 아규먼트를 확인할 수 있습니다.

StringAll 함수는 입력된 String를 연결해서 리턴하게 되어 있습니다.

출력 결과 "A,S.D.H.I"를 확인 할 수 있습니다.

vararg는 다른 파라미터와 함께 사용이 가능합니다.

 

 

 

fun AllValue( Value1:Int, Value2:String, vararg StringList:String):String{
        val rText = StringList.joinToString()
        val AllText = Value1.toString() + Value2 + rText
        return AllText
    }

val rString = AllValue(123,"더하기","D", "H", "I")
Toast.makeText(this.application, rString, Toast.LENGTH_SHORT).show()

AllValue 함수는 파라미터 INT, String, vararg String를 사용합니다.

아규먼트 123, "더하기", "D", "H", "I"를 입력합니다.

결과는 "123더하기D,H,J" 입니다.

vararg는 다양한 가변 인자를 사용해서 함수를 유연하게 생성할 수 있습니다.

함수에 한개의 vararg만 사용이 가능합니다.

오늘은 코틀린(Kotlin) vararg에 대해서 알아보았습니다.

감사합니다.

반응형
반응형

오늘은 코틀린을 사용해서 매주 부자를 만들어주는 로또 랜덤 번호 생성기를 구현해보겠습니다.

로또 번호는 45개의 번호 중 6개의 번호를 선택하는 규칙입니다.

로또 랜덤 볼을 개발하기 위해서는 먼저 로또 볼이 어떻게 구성되어 있는지 확인을 해야 합니다.

최종 로또 랜덤 볼 프로그램은 하단 버튼을 눌러 난수를 발생하여 겹치지 않는 6개의 번호를 생성하는 모습입니다.

로또 볼 이미지를 만들기 위해서 파워포인트를 사용해서 원형을 만들고 색상은 로또 사이트에서 확인하였습니다.

각 볼 이미지는 숫자는 자릿수가 2자리 이므로 위치를 45번 기준으로 정했습니다.

이미지는 아무렇게나 만들어 주세요. 중요한 건 45개의 이미지를 분리해야 합니다.

안드로이드 프로젝트는 "빈 프로젝트"로 설정하고,  코트린(Kotlin)을 선택해주세요.

"res -> drawable"를 선택하고 우클릭하여 "Show in Explorer"을 선택해서 폴더로 이동해주세요.

위에서 만든 45개의 이미지를 "drawable" 폴더에 복사해주십시오.

"drawable" 폴더에 이미지를 복사 후 Android Studio에서 "drawable" 하위에 자동으로 이미지가 등록됩니다.

자 그럼 이제 준비는 모두 완료되었습니다.

먼저 UI를 만들기 위해서 "layout" 하위 "activity_main.xml" 파일을 클릭합니다.

생성된 "<androidx.constraintlayout.widget.ConstraintLayout"를 삭제하고 "LinearLayout"를 새로 생성해줍니다.

ImageView, Button을 세로로 배치하기 위해서입니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

orientation 속성은 "vertical"로 변경해주세요.

이제 볼을 저장하기 위한 ImageView를 6개 생성해줍니다.

ImageView는 위치를 고정하기 위해서 "layout_margin" 속성을 30px 정도 주었습니다.

<LinearLayout
        android:id="@+id/ll"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/ballView1"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView2"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView3"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView4"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView5"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
        <ImageView
            android:id="@+id/ballView6"
            android:layout_width="100px"
            android:layout_height="100px"
            android:gravity="center"
            android:layout_margin="30px"
            />
    </LinearLayout>

ImageView를 하나의 View로 고정하기 위해서 LinearLayout 내부에 구현했습니다.

가장 중요한 내용은 ImageView 속성 ID를 순차적으로 입력해야 합니다.

즉 "@+id/ballView1", "@+id/ballView2", "@+id/ballView3"~ "@+id/ballView6"순으로 지정해주세요.

마지막으로 랜덤 실행을 하기 위해서 버튼을 설정합니다.

 <Button
        android:id="@+id/btStart"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="시작"
        android:textSize="20sp" />

코드가 정상적으로 등록되었다면 Design에서 사진과 같은 것을 확인할 수 있습니다.

상단에 볼을 구현하기 위한 6개의 이미지가 있고 아래쪽에 실행 버튼이 위치합니다.

자 이제 "java" 폴더 하위에 있는 MainActivity.kt 파일을 클릭합니다.

먼저 볼을 저장할 수 있는 전역 변수를 선언합니다.

val BallList = ArrayList<Bitmap>()

BallList는 전역으로 사용하기 위해서 onCreate 위쪽에 선언해주세요.

"drawable"에 저장된 45개의 이미지를 한 번에 로드해서 BallList에 등록하는 코드입니다.

getResources()를 사용해서 저장된 정보 ID를 추출할 수 있습니다.

처음 저장된 이름을 순차적으로 저장하면 for문을 사용해서 한번에 ID를 추출해서 BITMAP을 생성할 수 있습니다.

생성된 BITMAP은 크기를 지정해서 BallList에 "add"함수를 사용해서 저장합니다.

 

 

 

Toast.makeText(this@MainActivity, "Create lottovall image.", Toast.LENGTH_SHORT).show()
        for( i in 0..44)
        {
            var bmp : Int = getResources().getIdentifier("lottoball" + (i + 1), "drawable", packageName )
            var bitmap:Bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(getResources(), bmp),
                70,70, false)
            BallList.add(bitmap)
        }

상단 Toast 메시지는 실행 구간을 확인하기 위해서 추가했습니다.

이제 저장된 45개의 이미지를 랜덤 하게 생성해서 이미지를 저장해보겠습니다.

먼저 버튼 클릭 이벤트를 설정합니다.

코틀린은 JAVA와 다르게 매우 직관적으로 클릭 이벤트를 설정할 수 있습니다.

val btn : Button = findViewById<Button>(R.id.btStart)

        btn.setOnClickListener{
            Toast.makeText(this@MainActivity, "button start.", Toast.LENGTH_SHORT).show()

            var set: TreeSet<Int> = TreeSet()

            while(set.size < 6){
                val random = Random()
                val num = random.nextInt(45)
                set.add(num)
            }

버튼 ID를 확인하고 setOnClickListener 함수를 설정해줍니다.

랜덤 번호는 겹치면 안 되기 때문에 TreeSet 이진 검색을 사용해서 저장해주세요.

코틀린은 JAVA와 동일한 알고리즘 클래스를 사용할 수 있습니다. 

마지막으로 랜덤으로 설정된 6개의 번호를 ImgView와 연결해줍니다.

Toast.makeText(this@MainActivity, "ball check.", Toast.LENGTH_SHORT).show()

            var nCount = 0
            for( i in set )
            {
                var tmpID : Int =  getResources().getIdentifier("ballView" + (nCount + 1),
                    "id", packageName )
                val imgView = findViewById<ImageView>(tmpID)
                imgView.setImageBitmap(BallList.get(i))
                nCount++
            }

            Toast.makeText(this@MainActivity, "button end.", Toast.LENGTH_SHORT).show()

for문을 사용해서 저장된 Treeset 이미지 번호를 전역 저장된 BallList에서 확인합니다.

ImageView 호출은 nCount를 사용해서 6번 반복하게 설정했습니다.

로또 랜덤 볼 생성 프로그램 실행 사진입니다.

하단 버튼을 클릭하면 새로운 번호가 출력되는 것을 확인할 수 있습니다.

코틀린과 JAVA를 두 개다 구현해보니 확실하게 코틀린이 더 편리합니다.

문법적으로도 매우 깔끔해서 가독성이 좋습니다.

오늘은 코틀린을 사용해서 로또 랜던 볼 생성 프로그램을 만들어 보았습니다.

감사합니다.

반응형
반응형

오늘은 코틀린 형식 확인 및 null에 대해서 알아보겠습니다.

코틀린(Kotlin)은 형식을 유추하기 위해서 굳이 지정하지 않아도 변수 선언 시점에 알아서 확인을 합니다.

하지만 코드가 길어지면 변수 형을 짐작하기 쉽지 않을 수 있습니다.

코틀린(Kotlin) 형식 확인

기본적으로 "text" 변수를 선언하고 텍스트 및 숫자를 대입하면 형식을 자동으로 확인합니다.

즉 "text" 변수에 텍스트를 지정하면 숫자 대입이 불가능합니다.

사진처럼 "text" 변수에 숫자 대입 시 오류를 확인할 수 있습니다.

더욱 정확한 표기를 하기 위해서 코틀린은 자바와 다르게 변수 뒤쪽에 형식을 지정합니다.

var text:String

var intValue:Int

지정된 형식은 처음 선언된 변수로만 대입이 가능합니다.

처음 선언 시점 변수 타입을 저장 후 대입 시 확인하여 오류를 발생합니다.

안드로이드 스튜디오를 사용할 경우 변수 대입 시점에 오류를 바로 확인할 수 있습니다.

하지만 String과 Int를 공통으로 지정할 수 있는 방식이 있습니다.

변수 선언 시점에 "Any"로 지정하면 됩니다.

"Any"는 자바 객체 형식과 동일하며 코틀린에 모든 클래스는 "Any"를 명시적으로 상속하고 있습니다.

"Pair"를 사용해서 변수를 초기화할 경우도 2가지 형태로 가능합니다.

"to"를 사용해서 지정하는 방법과 Pair 생성자를 사용하는 방법입니다.

상기 방법은 map 형태에도 동일하게 사용됩니다.

코틀린(Kotlin) null 사용법

코틀린(Kotlin)은 자바 시스템에서 가장 흔한 버그 패턴 "NullPointerException"을 방어하게 설계되어 있습니다.

기본적으로 null 초기화를 허용하지 않습니다.

자바 시스템에서는 null 확인 코드 구조를 확인하기 위해서 일종의 보일러 플레이트 코드로 사용합니다.

코틀린에서는 null로 초기화할 경우 컴파일 오류가 발생합니다.

코틀린에서는 null을 사용하기 위해서는 "?"를 좌측에 선언해 줘야 합니다.

"?"를 사용하면 컴파일 오류가 발생하지 않는 것을 확인할 수 있습니다.

"?"를 사용해서 함수 호출 시 리턴 값 또한 "?" 적용하여 null 허용을 지정해야 합니다.

즉 "?" 사용 후 리턴 값을 확인하기 위해서는 동일한 "?"를 지정해야 정상적으로 컴파일 됩니다.

null 적용 함수 리턴되는 변수 확인이 조금 불편하다면 엘비스 연산자 "?:"를 사용하면 됩니다.

엘리스 연산자를 사용하게 되면 null일 경우 선언된 값을 리턴합니다.

이상으로 코틀린 변수 확인 및 null에 대해서 마치겠습니다.

감사합니다.

believecom.tistory.com/entry/20200902Kotlin-2?category=1109462

 

코틀린(Kotlin) 안드로이드 배우기 (변수)

오늘은 코틀린(Kotlin) 변수에 대해서 알아보겠습니다. 코틀린에서 변수는 var, val로 구분할 수 있습니다. var, val 사용법에 따라서 코드를 안전하게 개발할 수 있습니다. VAR 먼저 var에 대해서 알아��

believecom.tistory.com

 

반응형
반응형

오늘은 코틀린(Kotlin) 변수에 대해서 알아보겠습니다.

코틀린에서 변수는 var, val로 구분할 수 있습니다.

var, val 사용법에 따라서 코드를 안전하게 개발할 수 있습니다.

VAR

먼저 var에 대해서 알아보겠습니다.

var은 기본적으로 변수값을 변경하고 싶을 경우 사용하는 변수입니다.

기본적으로 var을 선언 후 초기화를 진행하면, 이후 재 초기화가 가능합니다.

소스에서 같이 "cpu" 변수를 처음 "AMD"로 초기화하고, 이후 "INTEL"로 재 초기화해도 문제가 되지 않습니다.

컴파일 후 Toast를 사용해서 출력하면 "intel"이 잘 출력됩니다.

VAL

두 번째 변수는 val입니다.

val은 기본적으로 읽기 전용 참조이며, 초기화 후 재 할당이 불가능합니다.

즉 "cpu1" 변수에 "intel" 할 당 후 "AMD"로 초기화할 경우 오류가 발생합니다.

val 변수는 final 한정자 자바 변수와 동일한 기능을 합니다.

val 선언 후 재 초기화하면 error를 확인할 수 있습니다.

val은 기본적으로 변경은 불가능하지만, 참조된 객체의 상태는 변경할 수 있습니다.

배열을 사용해서 재 초기화할 경우는 오류가 발생합니다.

 

 

 

하지만, val로 선언된 배열에 함수를 사용해서 변경은 가능하다는 뜻입니다.

배열에 선언된 "list"에 remove를 사용해서 변경할 경우 정상적으로 아이템이 삭제됩니다.

변경된 변수를 for 문을 사용해서 출력했습니다.

코틀린(Kotlin) 변수는 var, val로 구분해서 오류를 최소화할 수 있어 매우 편리합니다.

정확한 변수의 개념을 이해해고 사용하면 더욱더 안전한 코드를 개발할 수 있습니다.

이상으로 코틀린 변수에 배우기를 마치겠습니다.

감사합니다.

https://believecom.tistory.com/entry/Kotlin-1-ClickEvent-when?category=1109462

 

코틀린(Kotlin) 안드로이드 배우기 #1 - ClickEvent, when

오늘은 코틀린(Kotlin) 안드로이드 배우기 #1 - ClickEvent, when에 대해서 알아보겠습니다. 코틀린(Korlin)을 사용하기 위해서는 기본적으로 안드로이드 스튜디오를 설치하면 바로 사용이 가능합니다. ��

believecom.tistory.com

 

반응형
반응형

오늘은 코틀린(Kotlin) 안드로이드 배우기 #1 - ClickEvent, when에 대해서 알아보겠습니다.

코틀린(Korlin)을 사용하기 위해서는 기본적으로 안드로이드 스튜디오를 설치하면 바로 사용이 가능합니다.

안드로이드 설치는 다음 시간에 다루고 이번 시간에는 코틀린을 사용해서 버튼 이벤트 연결에 대해서 알아보겠습니다.

안드로이드 스튜디오 설치 상태에서 "NewProject"를 선택 후 EmptyActivity를 선택해 줍니다.

Project 설정에서 원하는 폴더에 Name, Package 명을 입력해 주세요.

가장 중요한 "Language"는 Kotlin을 선택해 줍니다.

 

 

 

이번 강좌에서는 MainActivity, activity_main.xml 두 개 파일만 사용하겠습니다.

먼저 정렬을 하기 위해서 activity_main.xml 파일에서 레이아웃을 변경해 주십시오.

레이아웃 변경 후 컨트롤을 등록하기 위해서 아래 코드를 입력해 주세요.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="7dp"
        android:onClick="onClick"
        android:id="@+id/btnStart"
        android:text="Start"
        tools:ignore="MissingConstraints"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_gravity="center"
        android:layout_margin="25dp"
        android:id="@+id/MainText"/>

</LinearLayout>

세로 정렬을 사용하기 위해서 LinearLayout 속성 android:orientation="vertical"을 추가하고

이벤트를 사용하기 위해서 버튼, 텍스트 뷰를 추가해 줍니다.

"Shift" + F10을 클릭하면 컴파일 되면서 안드로이드가 실행됩니다.

버튼 이벤트 속성 중 android:onClick="onClick"은 Listener를 사용해서 이벤트를 연결하기 위해서 설정이 반드시 필요합니다.

이제 MainActivity로 이동합니다.

코틀린 확장자는. kt로 생성됩니다.

코틀린은 자바와 다르게 NULL 대한 처리를 명확하게 처리하여 오류를 최소화해 줍니다.

버튼 이벤트를 연결하기 위해서 View.OnClickListerner을 상속받습니다.

코틀린은 NULL을 구분하기 위해서'?'를 사용합니다.

즉 변수 뒤에'?' 가 있을 경우 NULL을 허용한다는 뜻입니다

'?'가 없을 경우는 NULL을 허용할 수 없어 컴파일이 안됩니다.

when문은 자바에서 사용하는 switch 문과 동일합니다.

버튼에 설정한 onClick를 연결하기 위해서 상속된 Listener 가상 함수 onClick을 override 합니다.

onClick 함수에서는 코틀린 when을 사용해서 버튼 ID를 구분해서 텍스트 뷰를 변경하는 로직을 추가합니다.

override fun onClick(v: View?) {
       when(v?.id)
       {
           R.id.btnStart->{
               var tView = findViewById<TextView>(R.id.MainText)
               if( bCheck) {
                   tView.setText("Click Button")
                   bCheck = false
               }
               else
               {
                   tView.setText(R.string.sRString1)
                   bCheck = true
               }
           }
       }
    }

코틀린은 형 변환을 자유롭게 하기 위해서 생성 시 만 설정해 줍니다.

findViewById<형변환Class>

코드를 추가하고 컴파일 하면 버튼을 클릭하면 텍스트 뷰가 변경되는 것을 확인할 수 있습니다.

이상으로 코틀린(Kotlin) 안드로이드 배우기 #1 강좌를 마치겠습니다.

감사합니다.

#코틀린, #안드로이드, #Kotlin, #안드로이드강좌, #onClick, #when

반응형

+ Recent posts