Tip. 변수/클래스 명 한번에 바꾸기(in AndroidStudio)'
Tip. Installation did not succeed. The application could not be installed.
다음과 같은 경고가 뜨면 Device Manager > Wipe Data를 통해 초기화 시켜주기...
화면을 항상 세로 방향으로 유지하기
AndroidManidest.xml 파일에서 activity 블록에 android:screenOrientation="portrait"을 추가
* portrait: 세로모드, landscape: 가로모드
* portrait을 사용하면 경고가 뜨나, 일단 강의에서는 무시하고 진행하도록 함
따로 준비한 배경화면 리소스를 사용하기
준비한 파일을 res > drawable 폴더에 넣고, activity_main.xml 파일에서 android:backgroud="@drawable/<파일명>"으로 설정해준다.
상단 상태표시줄 없애기
res > values > themes > themes.xml 파일에서
<item name="android:windowFullscreen">true</item>
위 항목 추가
현재 액티비티에서 다른 액티비티로 넘어가기
val intent = Intent(this, QuizQuestionsActivity::class.java)
startActivity(intent)
this로 지정된 액티비티에서 QuizQuestions액티비티로 이동이 가능(자바 파일이기에 뒤에 클래스 자바 추가 필요)
그리고 startActivity로 intent를 실행시켜 준다
* 이 상태에서는 액티비티 뷰가 넘어간 다음, Back 버튼을 누르면 다시 이전 액티비티로 돌아가게 됨
코드에 finish()를 추가하면 Back 버튼 누를 시 이전 액티비티로 넘어가지 않고 앱이 종료
Log.i와 Log.d
Log.i : 보통 성공 사례를 보고하는 데 사용(Info 모드에서 확인 가능)
Log.d : 디버깅 목적으로 사용(Debug 모드에서 확인 가능)
데이터 클래스 생성하기 (Constants 파일 안에 하드 코딩하는 방식)
1. java > com.example.<appName> 폴더에 kotlin data class를 생성하고, 우선 사용할 데이터 변수들을 생성한다
data class Question(
val id: Int,
val question: String,
val image: Int,
val optionOne:String,
val optionTwo:String,
val optionThree:String,
val optionFour:String,
val correctAnswer: Int
)
2. 같은 폴더에 Constants 이름의 Object 파일을 생성 후, 질문을 생성하는 함수 생성
3. 액티비티.kt 파일 내에 메소드 사용해서 데이터 가져오기
val questionsList = Constants.getQuestions()
스크롤 뷰 만들기
xml 파일에서 최상단 태그를 ScrollView로 변경, android:fillViewport="true"로 설정하면 화면 전체에 스크롤 뷰가 적용
tools 기능에서만 보이는 요소들
TextView 안에 tools:text="<내용>"을 작성하면 앱을 실행시켰을 때는 보이지 않고, tools 기능에서는 보이는 텍스트를 작성할 수 있다
그 외에도 scr으로 이미지를 넣을 수 있는 등, tools: 를 활용해서 다양한 요소를 띄워둘 수 있다.
ProgressBar
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="0dp"
style="?android:attr/progressBarStyleHorizontal"
android:layout_height="wrap_content"
android:layout_weight="1"
android:max="5"
android:indeterminate="false" //제한 시간 줄어드는 등, 움직이게 만들 것인지 여부
android:minHeight="50dp"
android:progress="0" //현재 진행 상황
/>
가중치 설정
가중치를 설정한 요소와 설정하지 않은 요소가 LinearLayout에 의해 정렬된다면, 가중치를 설정하는 요소는 최소한의 사이즈만을 차지하고 나머지 공간을 가중치를 설정한 요소들이 차지한다
margin과 padding의 차이
margin: 주변의 요소들로부터 거리를 두기 위해 설정 (바깥쪽에서 거리 두기)
padding: View의 테두리로부터 text 등의 거리를 떨어뜨리기 위해 설정 (안쪽에서 거리 두기)
xml을 이용해 배경 만들기
<shape xmlns:android="http://schemas.android.com/apk/res/android" // 모양을 설정
android:shape="rectangle" //무슨 모양인지 설정
>
<stroke //윤곽선 설정
android:width="1dp"
android:color="#E8E8E8"/>
<solid android:color="@color/white"/> //배경색 설정
<corners android:radius="5dp"/> //코너 둥글기 설정
</shape>
그리고 메인 view를 표시하는 xml 화면에서 android:background="@id"로 넣으면 적용됨
!! (force-unwrapping)
nullable로 선언했던 변수가 이제 null이 될 일이 없을 때, <변수명>!!으로 force-wrapping 처리를 해 준다
TextView로 버튼 기능 만들기 (w. AppCompat 액티비티)
1. 클래스에 OnClickListener 인터페이스를 구현
2. onCreate 함수에 각 객체들의 onClickListener를 만들어준다
tvOptionOne?.setOnClickListener(this)
tvOptionTwo?.setOnClickListener(this)
tvOptionThree?.setOnClickListener(this)
tvOptionFour?.setOnClickListener(this)
3. onClick 함수 구현
override fun onClick(view: View?) { //view로 클릭된 객체의 정보를 받아온다
when(view?.id){ //id 속성을 확인해서 어떤 객체가 클릭된 건지 확인
R.id.tv_option_one -> {
tvOptionOne?.let{
selectedOptionView(it, 1)
}
}
R.id.tv_option_two -> {
tvOptionTwo?.let{
selectedOptionView(it, 2)
}
}
R.id.tv_option_three -> {
tvOptionThree?.let{
selectedOptionView(it, 3)
}
}
R.id.tv_option_four -> {
tvOptionFour?.let{
selectedOptionView(it, 4)
}
}
}
}
let{ } 안에 실행시킬 함수를 입력
정보값을 다른 액티비티로 전달
Constants 파일 내에 다음과 같이 변수를 생성해 준다
const val USER_NAME : String = "user_name"
const val TOTAL_QUESTION : String = "total_question"
const val CORRECT_ANSWERS : String = "correct_answers"
전달 코드를 다음과 같이 작성
intent.putExtra(Constants.USER_NAME, etName.text.toString())
전달받을 곳에 코드를 다음과 같이 작성 (사용되는 m<변수명>은 상단에서 추가 해주고 사용해야 됨... 당연히)
mUserName = intent.getStringExtra(Constants.USER_NAME)
'Programing > Android(Kotlin)' 카테고리의 다른 글
[Android/Kotlin] 리사이클러뷰(Fragment) 구현 (0) | 2023.08.28 |
---|---|
[카카오맵 API/Kotlin] 앱에 지도 화면 띄우기 (0) | 2023.08.25 |
[Udemy] 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.07.12 |
[Udemy] 분 단위 나이 계산기(Android 및 Kotlin 개발 완전 정복) (0) | 2023.06.26 |
Kotlin(코틀린) 기본 문법 정리 (0) | 2023.04.01 |