Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

yourginieus

Activity, setOnClickListener(), Toast, 난수 표시 본문

Android/Android Kotlin 기초 실습 정리

Activity, setOnClickListener(), Toast, 난수 표시

EOJIN 2022. 10. 25. 02:56
  • Activity
    • Android 앱 사용자 UI를 통해 이벤트를 수신하는 핵심 Android 클래스
    • 앱이 시작되면 AndroidManifest.xml 파일에 지정된 Activity가 시작됨
    • Android 앱에서는 AndroidManifest.xml 을 통해 사용자가 앱의 실행 아이콘을 탭할 시 MainActivity가 실행됨을 나타냄
    • 액티비티를 실행하기 위해, Android OS는 매니페스트의 정보를 사용하고 앱의 환경을 설정하며 MainActivity를 구성함
    • 각 액티비티에는 관련된 레이아웃 파일이 있음
    • Activity와 Layout은 layout inflation 이라고 하는 프로세스에 의해 연결 됨
    • 액티비티가 시작되면 XML 레이아웃 파일에 정의된 뷰가 Kotlin 뷰 객체로 변환 됨
    • 이 작업이 완료되면 액티비티는 이러한 객체를 화면에 그릴 수 있으며, 동적으로 수정할 수도 있음
  • MainActivity
class MainActivity : AppCompatActivity() {
	...
}

** AppCompatActivity : Activity의 하위 클래스. 최신 Android 기능을 모두 지원하면서 이전 버전의 Android와의 하위 호환성을 제공함. 가능한 한 많은 장치와 사용자가 앱을 사용할 수 있도록 하려면 AppCompatActvity 사용

  • onCreate() method
    • Activity는 생성자를 이용하여 개체를 초기화하는 것이 아닌, 사전 정의된 method(lifecycle method) 가 activity setup의 파트로 호출 됨
    • 이러한 life cycle method 중의 하나가 onCreate()
    • 여기서 Actiity와 관련된 레이아웃을 지정하고 확장함
    • setContentView() 를 통해!
override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)
   setContentView(R.layout.activity_main)
}
  • setContentView() method : 레이아웃의 ID를 통해 해당 레이아웃을 참조함
    • R.layout.id 는 정수로서 참조 됨
    • R클래스는 앱의 모든 resources를 포함하며, res 디렉토리로 이동 함
    • 리소스에는 파일 확장자는 포함되지 않음
  • Layout : View
    • layout 파일은 res/layout에 있으며, 액티비티가 실제로 어떻게 보이는지를 나타내는 XML 파일
    • 뷰를 정의하고 뷰가 화면에 표시되는 위치를 정의 함
      • View : View 클래스로 확장되며, 다양한 유형의 뷰가 있음
        • TextView, Button, ImageView, CheckBox ...
<?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="wrap_content"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

</LinearLayout>
  • <LinearLayout> : 레이아웃의 최상위 또는 루트 element
    • ViewGroup 임
    • View group은 다른 view들을 포함하고 있으며 화면에서 view의 위치를 지정하는 데 도움이 됨
    • layout에 추가 된 모든 view 및 view group은 view hierarchy에 포함되며, 그 계층의 root는 xml의 최상위 요소로 설정 됨
  • Layout : Strings
    • 레이아웃이나 코드 파일의 문자열들은 직접 치는 것보다 별도의 파일에 저장하는 것이 좋음
    • strings.xml 파일!
    • res/values/ 디렉토리에 위치 함
    • 문자열을 여러 번 사용하는 경우 문자열 관리가 수월해짐
    • 언어별로 문자열 리소스 파일을 생성해야 하므로 앱 번역 및 현지화를 위해서는 문자열 리소스가 필수!
<resources>
   <string name="app_name">DiceRoller</string>
   <string name="roll_label">Roll</string>
</resources>
  • android:layout_gravity
    • center_vertical : 해당 뷰를 상위요소의 세로 가운데에 위치시킴
    • center_horizontal : 해당 뷰를 상위요소의 가로 가운데에 위치시킴
  • 클릭 핸들러
    • 클릭 가능한 UI 요소를 클릭하거나 탭할 때마다 호출되는 method
    • setOnClickListener() : handler method로 이동하는 method
  • Toast 메세지
    • 화면 위에 잠깐 띄워지는 메세지
    • Toast.makeText() 를 통해 생성 가능 -> 필요한 4가지 요소
      • Context : 최신 상태의 Android OS와 소통하고 그에 대한 정보를 얻어올 수 있게 함
        • Toast object가 OS에 토스트를 표시하도록 지시하기 위해 필요
        • AppCompatActivity가 Context의 하위 클래스이기 때문에, this로 대체 가능
      • 표시되는 메세지
      • 메세지 표시 길이
      • 토스트 표시를 위한 show() method
class MainActivity : AppCompatActivity() {

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

        val rollButton: Button = findViewById(R.id.roll_button)
        rollButton.setOnClickListener { rollDice() }
    }

    private fun rollDice() {
        Toast.makeText(this, "button clicked",
            Toast.LENGTH_SHORT).show()
    }
}
  • TextView의 text 변경
    • TextView 객체에 layout의 ID로 바꾸려는 텍스트뷰를 할당한 후
    • text method를 통해 변경 가능
android:id="@+id/result_text"

val resultText: TextView = findViewById(R.id.result_text)
resultText.text = "Dice Rolled!"
  • 난수 표시
    • 버튼 클릭에 랜덤성을 추가하는 것
val randomInt = (1..6).random()
resultText.text = randomInt.toString()

https://developer.android.com/codelabs/kotlin-android-training-app-anatomy?index=..%2F..android-kotlin-fundamentals&hl=ko#0 

 

Comments