ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 생 초보가 Android App 개발하는 일기 with kotlin - 2
    Android 2021. 1. 6. 01:51
    728x90

    Adroid Studio를 여니 갑자기 update 하라고 하네요. 3.5에서 4.0으로 update길래 그냥 update 했습니다.

    바뀐 점들은 제가 초보기 때문에 일단 넘기고 공부 좀 한 다음에 다시 살펴봐야 할 것 같네요.

    어제에 이어 2강에서 간단한 셋팅하는법 쭉 보다가 auto import 기능 활성화하는 것만 적용했습니다.

    1. File > Settings > Editor > General > Auto Import 메뉴로 이동

    Project 구조 분석

    1. app/java/com.rajent/MianActivity
      • project 생성 시 빈 project를 선택하면 AppCompatActivity를 상속받아 class를 만들어줍니다.
      • 그리고 OnCreate를 overide해서 수정하는데 setContentView함수로 Resource에 정의된 아래 activity layout를 설정하는 code입니다.
      • R은 Resource, 그뒤로는 아래 res이하 경로와 일치합니다. /를 . 으로 바뀌는 정도만 다르네요.
    2. app/res/layout/activity_main.xml
      • activity의 UI를 정의합니다. UI로 화면을 그리거나 배치할 수 있고 xml모드로 resource를 정의할 수 있습니다.
      • Hello, World 문구를 변경하고 싶으면 Code로 이동해서 android:text="Hello. World!" 여기를 수정하면 됩니다.
    3. app/res/values/strings.xml : string resorce를 정의.

    Layout종류

    1. LinearLayout

      • 직선 방향으로 배치 (가로 혹은 세로)
      • 복잡한 Layout은 nested LinearLayout으로 정의 가능
      • XML으로 직접 입력시 추천
      • Component Tree에서 우클릭 후 "Convert LinearLayout to ConstraintLayout" 눌러서 변경 가능
    2. ConstraintLayout

      • 복잡한 Layout을 nested view group 없이 정의 가능
      • 상하좌우 constraint 지정해줘야 함
      • match_prarent 대신 match_constraint 사용 (또는 "0dp" 사용)
      • Designer 쓴다면 사용 추천
    3. TableLayout

      • 테이블 구조를 표현할 때 사용
      • Row:태그를 사용해서 행 지정
      • Column: 0번 column부터 시작하지 않을 때는 layout_column 속성으로 열 값 지정
    4. FrameLayout

      • Children View들을 중첩하는 Layout
      • 표시되는 순서: 맨 마지막 View가 맨 위에 출력됨

    Inflation : Layout xml을 읽어서 메모리 내에 객체로 만드는 과정
    Anko : Kotlin Lab, SetContaintView()없이 바로 code에서 UI정의 가능

    anko를 사용하려면 Gradle에 추가해줘야 한다고 하네요.
    Gradle Scripts > build.gradle에서 아래와 같이 추가해줍니다.

    이건 version 명시...

    buildscript {
        ext.kotlin_version = '1.3.41'
        ext.anko_version = '9.10.8'

    module쪽에 dependencies에 추가해줍니다.

    dependencies {
        implementation "org.jetbrains.anko:anko:$anko_version"

    그리고 MainActivity.kt에서 아래와 같이 사용 가능합니다.

    import org.jetbrains.anko.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //setContentView(R.layout.activity_main)
    
            verticalLayout {
                padding = dip(30)
                editText {
                    hint = "name"
                    textSize = 24f
                }
                editText {
                    hint = "Password"
                    textSize = 24f
                }
                button("Login") {
                    textSize = 26f
                }
    
            }
        }
    }

    그냥 실행하니 에러가 나네요. Project build를 하니 download를 받으면서 시간이 좀 지나면 build successed가 뜨고 다시 실행하니 잘 동작합니다.


    ID 속성

    다른 view 참조를 위해 id사용
    adroid:id="@+id/[이름]"
    @: Resource 참조 의미
    +: 추가

    • 여러 군데서 사용 가능

    Kotlin에서는 [이름]에 해당하는 부분을 바로 변수로 사용 가능
    -> Java에서는 findViewById()로 찾아야 했던 것에 비해 매우 편리하다고 하네요

    layout_ 로 시작하는 속성

    • 현재 view와 이 view가 놓이는 view group 간의 관계 설정
    • layout_width & layout_height: 가로 세로 길이 : wrap_content( 딱 맞는 크기) 또는 match_parent (view group 전체 크기) 사용
    • 숫자로도 지정 가능 : layout_height="100dp" 참고로 dp는 밀도 독립적인 픽셀 개념. 해상도에 가변적이라고 하네요.
    • layout_gravity : 놓일 view group에서 정렬
    • layout_margin: 현재 view 바깥의 여백. padding은 내 view내에서 여백 줄 때 사용. 별개임.
    • layout_weight: 크기 비율 지정 가능

    대충 Layout이 어떤 건지 개념적으로 정리해봤습니다.

     

    Anko 설정하면서 띄워본 거 말고는 아직 UI나 로직상에 뭔가 바꿔본 게 없네요.

     

    오늘은 2~4강을 쭉 보면서 개념을 이해하고 정리해봤는데 다음은 실제 Activiy 구현 부랑 Event 쪽이라서 재밌을 것 같네요. 

     

     

    댓글

Designed by black7375.