본문 바로가기
인프런) 앱 8개를 만들면서 배우는 안드로이드 코틀린

섹션 4. 명언 앱 만들기(2)

by 농농씨 2023. 8. 30.

들어가기에 앞서,

-코틀린에서의 물음표(?)와 느낌표(!)의 의미

? ➡️ null 일 수 있다.

! ➡️ null 이 아님.

 

-안드로이드 앱 뒤로가기 버튼 이벤트

"종료하시려면 한 번 더 눌러주세요"

검색을 잘 이용해서... 구글링을 해보자

 

// MainActivity 파일에서

class MainActivity : AppCompatActivity() {

    private var isDouble = false // 변수값 기본세팅
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    
    override fun onBackPressed(){ // 뒤로가기버튼 누를때 실행되는 함수
        Log.d("MainActivity", "backbutton") // 뒤로가기 버튼 누르면 로그 기록됨
        if(isDouble == true) { 
            finish()
            // 한번클릭하면 isDouble이 false인 상태에서 함수가 실행됐으므로 앱이 종료되지 않지만,
            // 2초 지나기 전에 한번 더  클릭하면 isDouble이 true인 상태에서 함수가 실행됐으므로 앱이 종료됨.
        }
        
        isDouble = true // 뒤로가기 버튼 누르면 함수 실행되면서 변수값 바뀜
        Toast.makeText(this, "종료하시려면 더블클릭", Toast.LENGTH_LONG).show()
        // 토스트메시지
        
        Handler().postDelayed({ // 스플래시 화면 만들 때 사용했음
            isDouble = false
        }, 2000) // 2초 지나면 다시 변수가 false 됨
    }

}

 

 

-이제 명언 앱을 만들어보자

res 파일의 layout 디렉터리의 activity_main.xml 파일을 열어주자(없으면 res를 우클릭해서 new-xml-layout을 만들자)

 

전체를 ConstraintLayout으로 감싸주고 (배경은 검은색) 중간에 버튼을 만들면 에러표시가 날 것이다. ConstraintLayout은 뷰의 위치를 각각 지정해줘야하는데 그렇지 않아서 오류가 난 것이다.

 

뷰를 클릭하면 나오는 점선을 각각 parent까지 드래그 해서 옮겨주면 app:layout_constraintBottom_toBottomOf="parent" 와 같은 특성이 알아서 추가되면서 오류표시가 사라진다. 이어서 명언 텍스트 뷰도 추가해주자.

근데 내가 한 건 왜 EndOf 속성을 parent로 추가해도 버튼이 왼쪽에 붙어있을까? 모르겠다.

 

이대로 배민주아체까지 넣어주자

res 디렉터리에 new-Directory 해서 font 라는 디렉터리 만들어주자

거기에 다운받은 폰트파일 이름을 영어소문자로 바꾼 다음 복붙 또는 드래그 해주자

그리고 텍스트뷰에

android:fontFamily="@font/bmjua"

을 추가해주면 끝~

 

-이제 저 '전체명언보기 버튼'을 클릭하면 나올 액티비티를 만들어주자

메인액티비티 있는 디렉터리 우클릭 New-Activity-Empty Activity 클릭해서 SentenceActivity 라는 액티비티 파일 만들기.

 

다른 액티비티로 이동하는 기능을 만들어주기 위해 앱수준의 그래들 파일에 데이터바인딩 특성을 추가해주자

dataBinding {
    enable = true
}

 

메인 액티비티 파일을 <layout> 태그로 감싸주고(대문자 Layout 안됨 주의)

 

버튼에 아이디 추가해주기. "@id/showAllSentenceBtn"

 

 

다음과 같이 메인 액티비티에 데이터 바인딩 구문 써주기

 

빌드는 되는데 버튼 클릭하니까 튕긴다.... ....

 

Logcat 보니까 

 

You need to use a Theme.AppCompat theme (or descendant) with this activity.

 

라고 뜨네요

 

구글링해서

<activity
    android:name=".LoginActivity"
    android:theme="@style/Theme.AppCompat"
    >
</activity>

 

라고 바꿔보라길래 해봣는데

응 역시 안됨

 

일단 강의를 따라가볼게요

 

 

액션바를 없애고 싶다면(상단에 이름 나와있는거)

(내 거엔 이미 없음)

res-values-themes-themes.xml 파일 열고 <style> 태그에 다음과 같이 추가해주기

<style>
    <item name="windowNoTitle">true</item>
</style>

 

-전체 명언화면에 리스트뷰를 넣어보겠음

 

메인액티비티에서 리스트를 만들고 데이터 넣어줌. 로그로 랜덤한 데이터 잘 가져오는지도 확인.

텍스트뷰 영역에 아이디 넣어주고 메인액티비티에서 바인딩해주기

 

실행!

버튼 클릭은 망했지만 랜덤 데이터 불러오기는 잘 되는군요

 

이제 '명언 출력화면'과 '명언 목록화면' 액티비티 파일을 각각 만들고 둘을 연결하는 버튼까지 만들었으니

'명언 목록화면'의 리스트뷰를 만들어봅시다.

 

-리스트뷰 만들기 실전편

지난 게시글에서 이 구조도를 통해 리스트뷰를 이해하고자 했다.

 

메인액티비티에서 리스트의 형태로 어댑터에 데이터를 전달하고, 리스트뷰를 구성하는 아이템 레이아웃에 어댑터가 리스트의 데이터를 하나하나 넣어준다.

그리고 메인 액티비티 레이아웃에서 리스트뷰를 구성하는 그 레이아웃 파일을  불러와서 리스트뷰 자리에 출력한다.

 

이젠 실제로 만들어보자

 

-리스트뷰의 아이템을 구성하는 레이아웃 만들어주기

layout 디렉토리 우클릭-New-LayoutResoure File 클릭해서 listview_item 이라는 레이아웃 파일 만들어주기

구성은 <LinearLayout>(편의상), 높이는 대충 60dp 정도? 텍스트뷰도 하나 넣어주면서 아이디도 넣어주기~

대충 요러케

 

-어댑터 만들기

MainActivity.kt처럼 .kt로 끝나는 소스파일 있는 디렉터리 우클릭-New-Kotlin Class/File

이름은 ListViewAdapter

 

ListViewAdapter에 BaseAdapter 상속?받도록 하면서 나타나는 빨간줄은 alt+enter 누르고 맨 위에 뜨는 emplement members 눌러서 부르란 거 다 불러주기

 

총 4개 불러질텐데 getItem()이랑 getItemId()는 사용방법만 익히고 중요한건 getCount()와 getView() 임!

 

지금 총 세 연결이 필요하다.

  1. SentenceActivity ➡️ 어댑터 연결부분
  2. Adapter ➡️ listview_item.xml 연결부분
  3. listview_item.xml ➡️ Activity_sentence.xml의 listview 연결부분

지금  2. 어댑터와 listview_item.xml을 연결하는 부분을 해주고 왔다.

어댑터에서 레이아웃으로 데이터를 하나하나 넣는 과정!

 

 

-이제 3. 리스트뷰 구성 레이아웃을 Activity_sentence의 리스트뷰에 연결하자

 

activity_sentence.xml로 가서 리스트뷰 하나 만들고 아이디 부여하기. 이름은 sentenceListView

 

이제 리스트뷰구성 레이아웃과 리스트뷰자리까지 다 만들었으니 연결만 해주면 됨

 

문장목록출력화면에서, 리스트뷰구성 레이아웃을 findViewById로 가져왔다.(3번 연결)

그리고 어댑터도 만들어주자. 여기에 데이터 넣어야 함(1번연결).

메인액티비티에서 만들었던 리스트 데이터를 여기에도 넣어주고

 

어댑터 이름 바꿔주고,

최종적으로 문장출력화면의 리스트뷰의 자체 어댑터에, 내가 만든 어댑터를 연결해서 마치도록 하자.

 

강의 실행화면>

오른쪽은 글자크기랑 폰트 바꿔준거

 

리스트뷰는 원래 어려운거니까 크게 당황하지 마라