ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TECHIT 앱 스쿨 2기: Android 44 ~ 45일차 (23.07.03)
    [THEC!T] 앱 스쿨2기 : Android 2023. 7. 3. 21:25
    728x90

    지난주 목요일에는 TECHIT 홈페이지에서 node.js 에 대한 강의를 수강하였고, 금요일은 휴강이였습니다.
     
    오늘 오전에는 앱스쿨2기에서 멘토을 담당하고 계신 안경무 멘토님께서 github 에 대하여 특강을 진행해주셨습니다.
    멘토님께서는 깃헙 입문자도 쉽게 이해 할 수 있도록 특강을 진행해주셔서 더욱 집중해서 듣게 되었습니다.
     
     
    자료 출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 내용
     
    오후에는 윤재성 강사님께서 DrawerLayout에 대해 설명해주셨습니다.
     
    DrawerLayout
    DrawerLayout은 좌측에서 나타나는 메뉴를 구성하는 레이아웃입니다.
     

    [ activity_main.xml ]
    
    activity_main.xml은 include와 NaviationView로 구성되어 있다.
    
    include는 layout/app_bar_main.xml 파일이 설정되어 있다.
    NavigationView는 좌측에서 메뉴가 나타날 수 있도록 해주는 View이다.
    
    NavigationView의 headerLayout은 layout/nav_header_main.xml이 설정되어 있고
    menu 에는 menu/activity_main_drawer.xml이 설정되어 있다
    
    [ app_bar_main.xml ]
    
    여기서 중요한 부분은 Toolbar와 include 부분이다.
    ★화면의 Toolbar에 관련된 설정을 하겠다면 이 부분에서 해주면 된다.
    
    include에는 layout/content_main.xml 파일이 설정되어 있다.
    
    [ content_main.xml ]
    
    NavHostFragment 가 배치되어 있다. 보여주고자 하는 Fragment들을 설정하는 부분으로
    코드에서 작업을 해야 한다.
    
    NavHostFragment 의 navGraph 속성에 보여줄 Fragment들이 등록되어 있는 xml 파일을 설정한다.
    
    [ nav_header_main.xml ]
    좌측에서 나타나는 NavigationView의 상단 부분에 해당한다.
    ★이 부분은 애플리케이션에 맞게 자유롭게 구성해주면 된다
    
    [ menu/activity_main_drawer.xml ]
    좌측에서 나타나는 NavagationView의 하단 부분에 해당하다.
    ★메뉴 파일을 이용해 사용자가 선택할 화면 목록을 구성하게 된다.
    
    [ values/strings.xml ]
    ★보여줄 프래그먼트의 이름을 설정한다.
    
    ----------------------------------------------------------------------
    
    [1. nav_header_main.xml  작업]
    
    이 부분은 로그인한 사용자와 관련된 정보를 보여주는 부분이다.
    보통 로그인한 사용자에 따라 표시되는 데이터가 다르기 때문에
    코드로 처리해주는 것이 일반적이다.
    
    MainActivity.kt 의 Step01
    
    [2. 사용할 Fragment 들을 만들어준다]
    
    [3. values/strings.xml 작업]
    각 프래그먼트의 이름으로 사용할 문자열을 등록해준다.
    
    [4. navigation/mobile_navigation.xml 작업]
    사용할 프래그먼트들을 설정해준다.
    
    [5. menu/activity_main_drawer.xml 작업]
    메뉴를 등록한다.
    주의!!!! 메뉴 항목의 id는 mobile_navigation.xml에 등록한
    프래그먼트들의 id와 일치해야 한다.
    사용자가 선택한 메뉴의 id와 동일한 id로 등록되어 있는 프래그먼트가 나타난다.
    
    [6. MainActivity.kt 작업]
            appBarConfiguration = AppBarConfiguration(
                setOf(
                    R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow
                ), drawerLayout
            )
    
            위의 코드에서 setOf 에 메뉴의 item id를 순서대로 작성해준다.

     
     
    다음으로는 view를 xml을 이용하여 만드는 법과 코드를 이용하여 만드는 법에 대해서 알려주셨습니다.
     
    xml을 이용한 방법

    package com.test.android65_xmlview
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Button
    import android.widget.TextView
    import com.test.android65_xmlview.databinding.ActivityMainBinding
    import com.test.android65_xmlview.databinding.LayoutSub1Binding
    import com.test.android65_xmlview.databinding.LayoutSub3Binding
    import com.test.android65_xmlview.databinding.LayoutSub4Binding
    
    class MainActivity : AppCompatActivity() {
    
        lateinit var activityMainBinding: ActivityMainBinding
    
        lateinit var layoutSub3Binding: LayoutSub3Binding
        lateinit var layoutSub4Binding: LayoutSub4Binding
        lateinit var layoutSub1Binding: LayoutSub1Binding
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(activityMainBinding.root)
    
            // LayoutInflater로 View 생성
            val sub1 = layoutInflater.inflate(R.layout.layout_sub1, null)
            val sub2 = layoutInflater.inflate(R.layout.layout_sub2, null)
    
            // ViewBinding 생성
            layoutSub3Binding = LayoutSub3Binding.inflate(layoutInflater)
            layoutSub4Binding = LayoutSub4Binding.inflate(layoutInflater)
    
            // 생성한 View들을 레이아웃에 추가해준다.
            activityMainBinding.mainContainer.addView(sub1)
            activityMainBinding.mainContainer.addView(sub2)
            activityMainBinding.mainContainer.addView(layoutSub3Binding.root)
            activityMainBinding.mainContainer.addView(layoutSub4Binding.root)
    
            // View 객체를 바인딩 객체에 설정한다.
            layoutSub1Binding = LayoutSub1Binding.bind(sub1)
            layoutSub1Binding.run {
                buttonSub1.setOnClickListener {
                    textViewSub1.text = "sub1 버튼을 눌렀습니다."
                }
            }
    
             layoutSub3Binding.run{
                 buttonSub3.setOnClickListener {
                     textViewSub3.text = "sub3 버튼을 눌렀습니다."
                 }
             }
    
        }
    }

     
    코드를 이용하여 view를 추가하는 방법

    package com.test.android66_codeview
    
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import android.view.ViewGroup
    import android.widget.EditText
    import com.test.android66_codeview.databinding.ActivityMainBinding
    
    class MainActivity : AppCompatActivity() {
    
        lateinit var activityMainBinding: ActivityMainBinding
        // 생성된 뷰들을 담을 리스트
        var viewList = mutableListOf<EditText>()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
            setContentView(activityMainBinding.root)
    
            activityMainBinding.run{
                button.setOnClickListener {
                    // View의 가로세로 길이
                    val params = ViewGroup.LayoutParams(
                        ViewGroup.LayoutParams.MATCH_PARENT,
                        ViewGroup.LayoutParams.WRAP_CONTENT
                    )
    
                    // EditText를 생성한다.
                    val newEditText = EditText(this@MainActivity)
    
                    // 설정
                    newEditText.hint = "문자열을 입력해주세요."
                    newEditText.layoutParams = params
    
                    viewList.add(newEditText)
    
                    // 생성한 뷰를 추가한다.
                    mainContainer.addView(newEditText)
                }
                button2.setOnClickListener {
                    textView.text = ""
                    // 리스트에 들어 있는 뷰의 수 만큼 반복한다.
                    for(v1 in viewList){
                        textView.append("${v1.text.toString()}\n")
                    }
                }
                button3.setOnClickListener {
                    // 순서를 지정하여 제거
    //                mainContainer.removeViewAt(viewList.size-1)
    //                viewList.removeLast()
    
                    // View를 지정하여 제거
                    val lastView = viewList.last()
                    mainContainer.removeView(lastView)
                    viewList.removeLast()
    
                }
    
                button4.setOnClickListener {
                    // 모든 뷰를 제거한다.
                    mainContainer.removeAllViews()
                }
    
            }
        }
    }

     
    이후에는 당일 배운 내용을 바탕으로 하기와 같은 문제를 내주셨습니다.
    저의 경우 오늘 배운 내용과 프래그먼트를 이용하여 해당 문제를 작성해 보았습니다.

     

    유효성 검사는 하지 않았습니다.

     

    마무리
    개념에 대한 강의는 이제 얼마 남지 않았고 조만간 프로젝트에 들어가게 됩니다.
    정말 많은 걱정이 됩니다. 특히 잘하는 사람들도 많아서 민폐가 될 것 같아 민폐가 되지 않도록 강사님께서 알려주신 내용들을 복습하며 안드로이드 관련 서적과 공식문서등을 찾아보며 해야할 것 같습니다.
     
    오늘의 마음가짐
    ....힘내자...

     

Designed by Tistory.