가장 최근에 따라하면서 만든 앱은 당근마켓처럼 판매할 물건을 올리고 물건을 누르면 채팅창이 열리는 앱을 만들어봤습니다.
<LinearLayout
android:id="@+id/toolBarLayout"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="중고거래"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:src="@drawable/carrot"
android:layout_width="25dp"
android:layout_height="25dp"/>
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:background="@color/gray_cc"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolBarLayout" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/itemRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolBarLayout" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/addFloatingButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:backgroundTint="@color/orange"
android:src="@drawable/ic_baseline_add_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:tint="@color/white" />
홈버튼, 채팅버튼, 마이페이지버튼을 아래 nav버튼으로 만들어주었습니다. home 버튼을 눌렀을때 나타나는 fragment 레이아웃의 코드입니다.
<LinearLayout
android:id="@+id/toolBarLayout"
android:layout_width="0dp"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="채팅방 리스트"
android:textColor="@color/black"
android:textSize="20sp"
android:textStyle="bold" />
<ImageView
android:src="@drawable/carrot"
android:layout_width="25dp"
android:layout_height="25dp"/>
</LinearLayout>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:background="@color/gray_cc"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolBarLayout" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/chatListRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolBarLayout" />
채팅 리스트 fragment 레이아웃 코드입니다.
<EditText
android:id="@+id/emailEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:hint="Email"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/passwordEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/emailEditText" />
<Button
android:id="@+id/signInOutButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/orange"
android:enabled="false"
android:text="로그인"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/passwordEditText" />
<Button
android:id="@+id/signUpButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="10dp"
android:backgroundTint="@color/orange"
android:enabled="false"
android:text="회원가입"
app:layout_constraintEnd_toStartOf="@+id/signInOutButton"
app:layout_constraintTop_toBottomOf="@+id/passwordEditText" />
마이페이지 layout 구성모습입니다.
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/chatRecyclerView"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/messageEditText"
android:layout_width="0dp"
android:layout_height="0dp"/>
<EditText
android:id="@+id/messageEditText"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/sendButton"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/sendButton"
android:text="전송"
android:backgroundTint="@color/orange"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
채팅이 만들어졌을때 다른 사용자의 이름을 누르면 채팅창이 나옵니다. 그 채팅창의 layout을 구성하였습니다.
<FrameLayout
android:id="@+id/fragmentContainer"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/bottomNavigation"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:itemIconTint="@drawable/selector_menu_color"
app:itemRippleColor="@null"
app:itemTextColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/bottom_navigation_menu" />
메인 activity에서는 위에서 만들어준 홈버튼, 채팅 리스트 보기 버튼, 마이페이지 버튼을 연결해주었습니다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val homeFragment = HomeFragment()
val chatListFragment = ChatListFragment()
val myPageFragment = MyPageFragment()
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigation)
replaceFragment(homeFragment)
bottomNavigationView.setOnItemSelectedListener {
when(it.itemId){
R.id.home -> replaceFragment(homeFragment)
R.id.chatList ->replaceFragment(chatListFragment)
R.id.myPage -> replaceFragment(myPageFragment)
}
true
}
}
private fun replaceFragment(fragment: Fragment){
supportFragmentManager.beginTransaction()
.apply {
replace(R.id.fragmentContainer, fragment)
commit()
}
}
}
메인 액티비티에서는 replaceFragment 함수를 만들어줬습니다. 버튼의 id 값의 따라서 fragment가 변하는 것으로 만들어주었습니다.
위 처럼 여러가지를 만들어보면서 앱 개발자로 진로를 정할 수 있었습니다. 컴공을 다니지만 웹을 할지 앱을 할지 고민이 정말 많았는데 이 수업을 듣기 잘한 것 같습니다. 수업량이 어마어마해서 지금도 챌린지가 끝났지만 꾸준하게 따라가고있습니다. 또 수업을 들으면서 개인적으로 만들고 싶었던 앱도 제작하게 되었습니다. 처음엔 혼자 간단하게 할려했는데 다른분께서 좋아보이셨는데 협업을 하게 되었습니다. 이 글을 보는 여러분들도 본인이 만들고 싶은 앱을 만들고 싶으시다면 이 강의를 듣는걸 추천드립니다.
수강료 100% 환급 챌린지 | 패스트캠퍼스
딱 5일간 진행되는 환급챌린지로 수강료 100% 환급받으세요! 더 늦기전에 자기계발 막차 탑승!
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'패스트캠퍼스 챌린지' 카테고리의 다른 글
[패스트캠퍼스 챌린지 30일차] Android 중고거래 앱 UI (0) | 2021.11.30 |
---|---|
[패스트캠퍼스 챌린지 29일차] Android tinder 앱 마무리 (0) | 2021.11.29 |
[패스트캠퍼스 챌린지 28일차] Android tinder DB 설정 (0) | 2021.11.28 |
[패스트캠퍼스 캠퍼스 27일차] Android tinder Facebook Login (0) | 2021.11.27 |
[패스트캠퍼스 챌린지 26일차] Android Tinder 앱 UI 및 로그인 기능 (0) | 2021.11.26 |