[TIL] Android 앱 개발 입문 : 팀 프로젝트 (파프리카마켓) 2

지혜·2023년 12월 28일

Android_TIL

목록 보기
26/70

✏231228 목요일 TIL(Today I learned) 오늘 배운 것

📖UI구현

[더보기 버튼 구현]

  • 더보기 버튼을 누르면 더보기버튼 자리에 다른 메뉴아이콘이 등장하고, 그 밑에 추가 메뉴아이콘줄과, 접기버튼이 나오도록 하였다.
  • xml에 android:visibility를 사용해서 만들었는데, 레이아웃부터 위젯까지 모든 부분에 상관없이 android:visibility=""을 적용할 수 있다.
    • android:visibility="visible"
      : android:visibility를 사용하지 않아도 적용되는 기본값.
    • android:visibility="invisible"
      : 레이아웃이나 위젯이 차지하고 있는 공간은 그대로 두고 그 안의 내용물들이 단순히 보이지 않는 상태
    • android:visibility="gone"
      : 레이아웃이나 위젯이 전부 사라진 상태. invisible과 달리 차지하고 있는 공간자체도 없어진다.
  • 이후 액티비티 코틀린 파일에서 더보기버튼에 대해 setOnClickListener를 사용하여 눌렸을 때 원하는 부분이 보이거나 사라지도록 설정했다.
 btnMore.setOnClickListener {
            menuIconMore.visibility = View.VISIBLE
            btnLess.visibility = View.VISIBLE
            btnMore.visibility = View.GONE
            btnPet.visibility = View.VISIBLE
        }
// menuIconMore 등에 대해서는 파일 내에서 findViewById로 UI와 이미 연결해 둠.
// xml에서와 똑같이 VISIBLE,INVISIBLE,GONE이 역할을 한다.

[탭레이아웃(TabLayout)구현]

 <com.google.android.material.tabs.TabLayout
                    android:id="@+id/tab_store"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:itemTextColor="#1C1C1C"
                    app:layout_constraintTop_toTopOf="parent">

                    <com.google.android.material.tabs.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="음식점" />

                    <com.google.android.material.tabs.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="건강" />

                    <com.google.android.material.tabs.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="생활" />

                    <com.google.android.material.tabs.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="전체" />

                </com.google.android.material.tabs.TabLayout>
  • 탭레이아웃을 사용했다. 원래는 프레그먼트와 합쳐서 사용하는게 일반적이지만, 지금 단계에선 사용하기 어려워서 밑에 ConstraintLayout으로 공간을 만들어 붙여줘서, Visible을 사용해 Tab을 누르면 보였다 안보였다 하는 방법을 사용하기로 했다.
 tabStore.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
            override fun onTabSelected(tab: TabLayout.Tab) {
                when(tab.position){
                    0 -> {
                        storeRestaurant.visibility = View.VISIBLE
                        storeHealth.visibility = View.GONE
                        storeLife.visibility = View.GONE
                        storeAll.visibility = View.GONE
                    }

                    1 -> {
                        storeHealth.visibility = View.VISIBLE
                        storeRestaurant.visibility = View.GONE
                        storeLife.visibility = View.GONE
                        storeAll.visibility = View.GONE
                    }

                    2 -> {
                        storeHealth.visibility = View.GONE
                        storeRestaurant.visibility = View.GONE
                        storeLife.visibility = View.VISIBLE
                        storeAll.visibility = View.GONE
                    }

                    3 -> {
                        storeAll.visibility = View.VISIBLE
                        storeRestaurant.visibility = View.GONE
                        storeHealth.visibility = View.GONE
                        storeLife.visibility = View.GONE
                    }
                }
            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {

            }

            override fun onTabReselected(tab: TabLayout.Tab?) {

            }
        })
 // tabStore 등에 대해서는 파일 내에서 findViewById로 UI와 이미 연결해 둠.
  • onTabUnselected와 onTabReselected는 사용하지 않아도 로드하지 않으면 오류가 발생한다. 사용하지 않으면 빈칸으로 두면 된다.
    • onTabUnselected( ) : 이미 탭이 클릭되었을 때, 한 번 더 클릭하면 클릭이 되지 않는 상태로 바꿔준다.
    • onTabReselected( ) : 이미 탭이 클릭되었을 때, 한 번 더 클릭하면 따로 이벤트를 줄 수 있게 설정해준다.
  • 오로지 원하는 모양을 만들겠다는 일념 하나로 이렇게 ..반복되는 코드가 만들어졌지만.. 재생산성..?을 높이는건 나중의 시간이 남는 나의 문제이다... 그리고 솔직히 이 이상 손대는 법을 모르기도 한다.!ㅎㅎ

📖오늘의 팀 프로젝트 트러블 슈팅

  1. 맨날 잘쓰던 스크롤뷰..가 원래는 잘쓰고있지 못했었나보다. 오늘 보니까 하단네비게이션에 스크롤뷰의 밑부분이 가려져서 끝까지 보이지 않았다는걸 이제 알았다. 구글링과 여러가지 방법들을 동원한 결과.. 그냥 스크롤뷰 자체에 android:paddingBottom을 주기로 했다. 근데 이게 10 20 줘서는 티도 안나고 100? 120? 정도 주니까 밑에 까지 스크롤이 되게 해줬다. 130이상부터는 하단네비게이션 위에 쪼끔 여백도 줬는데, 솔직히 뭘 기준으로 이러는지 모르겠다만 원하는 바가 나왔으니까 일단 두기로했다. 갈길이 멀어서.. 여유가 생기면 살펴보기로!

  2. 탭레이아웃이 선택되면 바뀌도록 액티비티 코틀린 파일에 작성했을 때, 코드엔 전혀 문제가 없는 것 같은데도 Null예외가 떴다. 아예 액티비티가 넘어가지 않았다. 그래서 알음알음 세이프콜도 써보고.. 지양해야한다던 !!도 써보고.. 했는데도 도통 바뀌는게 없어서, 로그캣에서 내 코드에 문제발생지점 찍어준 곳부터 다시 찬찬히 봤는데, 내가.. findViewById를 엉뚱한 것을 걸어둬서 값을 못 받아오는거였다.! 내 나름대로 구분하기 위해서 노력한 아이디 분류였는데도, 다 그게 그거 같으니까 헷갈린다. 열받긴한데.. 찾아서 너무 다행이다. 진짜 몇시간짜리였을 뻔.. 이런 오타?오류같은건 너무 무섭다.


📖오늘의 반성과 내일 할 일

[반성]

  • 반성이라기보단 걱정인데, 일단 지금 레이아웃 하나에 모든걸 작성하고 있다. 나중에 팀원들과 합쳤을 때, 파일이.. 적은게 유리할까 많아도 한 페이지 안에 내용이 적은게 유리할까? 요즘 트렌드는 최대한 줄 수를 줄이는 것이라고 듣긴 들었는데, xml에도 해당하는 이야기인지는 모르겠다.
  • 문자열은 string.xml에 옮겨서 하드코딩하지 않는다지만.. 설정 탭 안에 아이템을.. 일일히 하드코딩하고 있는 나. 조금.. 현타가 온다. 이게 맞는지도 모르겠다.. 엉성해서 좀 창피하다..ㅎㅎ 내일 팀원들과 공유할 때 꼭 확인해야할 포인트.
  • 그리고 어쨌든 마감이 있으니까. 되는 것에만 몰두해서 코드가 지저분한 것 같다. 그것도 좀 속상하다.

[내일 할 일]

  • 내일은 팀원들에게 공유하기전에.. string.xml에 하드코딩을 옮겨놔야 한다. 사실 옮겨놓고.. 영어도 .. 설정해줘야하는데.. 영어..? 큰일이네..
  • 가게 부분말고 클래스 부분 가로 스크롤 두개정도 만들어야하는데.. 뷰페이저? 리사이클뷰? 가로스크롤? 뭘 써야하는지 아직도 좀 헷갈린다.
  • 이외에 디테일 다듬기. 피드백 받고 고치기..는 아마 토요일부분으로 넘어가지 않을까?
profile
파이팅!

0개의 댓글