From e90222e8db2121124230abb20b1d5e1ad12d8634 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 1 Aug 2025 19:25:14 +0900 Subject: [PATCH] =?UTF-8?q?feat(ui):=20=EC=B1=84=ED=8C=85=20=ED=83=AD=20?= =?UTF-8?q?=EB=82=B4=20TabLayout=20=EC=BA=90=EB=A6=AD=ED=84=B0,=20?= =?UTF-8?q?=ED=86=A1=20=ED=83=AD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vividnext/sodalive/chat/ChatFragment.kt | 84 ++++++++++++++++++- .../chat/character/CharacterTabFragment.kt | 16 ++++ .../sodalive/chat/talk/TalkTabFragment.kt | 15 ++++ .../res/layout/fragment_character_tab.xml | 19 +++++ app/src/main/res/layout/fragment_chat.xml | 68 +++++++++++++-- app/src/main/res/layout/fragment_talk_tab.xml | 19 +++++ app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/themes.xml | 3 +- 8 files changed, 212 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt create mode 100644 app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt create mode 100644 app/src/main/res/layout/fragment_character_tab.xml create mode 100644 app/src/main/res/layout/fragment_talk_tab.xml diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/ChatFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/ChatFragment.kt index d6436e23..5bd72fe3 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/ChatFragment.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/ChatFragment.kt @@ -1,18 +1,96 @@ package kr.co.vividnext.sodalive.chat +import android.content.Intent import android.os.Bundle import android.view.View +import com.google.android.material.tabs.TabLayout +import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.chat.character.CharacterTabFragment +import kr.co.vividnext.sodalive.chat.talk.TalkTabFragment +import kr.co.vividnext.sodalive.common.SharedPreferenceManager import kr.co.vividnext.sodalive.databinding.FragmentChatBinding +import kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity +import kr.co.vividnext.sodalive.search.SearchActivity class ChatFragment : BaseFragment(FragmentChatBinding::inflate) { + private var currentTab = 0 + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - initView() + setupToolbar() + setupTabs() } - private fun initView() { - // 채팅 화면 초기화 로직 + private fun setupToolbar() { + if (SharedPreferenceManager.token.isNotBlank()) { + binding.llShortIcon.visibility = View.VISIBLE + + binding.ivSearch.setOnClickListener { + startActivity( + Intent( + requireContext(), + SearchActivity::class.java + ) + ) + } + + binding.ivCharge.setOnClickListener { + startActivity( + Intent( + requireContext(), + CanChargeActivity::class.java + ) + ) + } + } else { + binding.llShortIcon.visibility = View.GONE + } + } + + private fun setupTabs() { + // 탭 추가 + binding.tabLayout.addTab(binding.tabLayout.newTab().setText("캐릭터")) + binding.tabLayout.addTab(binding.tabLayout.newTab().setText("톡")) + + // 탭 선택 리스너 설정 + binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener { + override fun onTabSelected(tab: TabLayout.Tab) { + currentTab = tab.position + showTabContent(currentTab) + } + + override fun onTabUnselected(tab: TabLayout.Tab) { + // 필요한 경우 구현 + } + + override fun onTabReselected(tab: TabLayout.Tab) { + // 필요한 경우 구현 + } + }) + + // 초기 탭 선택 + showTabContent(currentTab) + } + + private fun showTabContent(position: Int) { + val fragmentManager = childFragmentManager + val fragmentTransaction = fragmentManager.beginTransaction() + + // 기존 프래그먼트 제거 + fragmentManager.fragments.forEach { + fragmentTransaction.remove(it) + } + + // 선택된 탭에 따라 프래그먼트 표시 + val fragment = when (position) { + 0 -> CharacterTabFragment() + 1 -> TalkTabFragment() + else -> CharacterTabFragment() + } + + fragmentTransaction.add(R.id.fl_container, fragment) + fragmentTransaction.commit() } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt new file mode 100644 index 00000000..afd279bc --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/character/CharacterTabFragment.kt @@ -0,0 +1,16 @@ +package kr.co.vividnext.sodalive.chat.character + +import android.os.Bundle +import android.view.View +import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.databinding.FragmentCharacterTabBinding + +// 캐릭터 탭 프래그먼트 +class CharacterTabFragment : BaseFragment( + FragmentCharacterTabBinding::inflate +) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + // 캐릭터 탭 초기화 로직 + } +} diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt new file mode 100644 index 00000000..b65f5f0e --- /dev/null +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/TalkTabFragment.kt @@ -0,0 +1,15 @@ +package kr.co.vividnext.sodalive.chat.talk + +import android.os.Bundle +import android.view.View +import kr.co.vividnext.sodalive.base.BaseFragment +import kr.co.vividnext.sodalive.databinding.FragmentTalkTabBinding + +class TalkTabFragment : BaseFragment( + FragmentTalkTabBinding::inflate +) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + // 톡 탭 초기화 로직 + } +} diff --git a/app/src/main/res/layout/fragment_character_tab.xml b/app/src/main/res/layout/fragment_character_tab.xml new file mode 100644 index 00000000..81b23f62 --- /dev/null +++ b/app/src/main/res/layout/fragment_character_tab.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/layout/fragment_chat.xml b/app/src/main/res/layout/fragment_chat.xml index ed064a1c..61b5e985 100644 --- a/app/src/main/res/layout/fragment_chat.xml +++ b/app/src/main/res/layout/fragment_chat.xml @@ -3,17 +3,67 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/black"> + android:background="@color/color_131313"> - + + + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/tab_layout" /> diff --git a/app/src/main/res/layout/fragment_talk_tab.xml b/app/src/main/res/layout/fragment_talk_tab.xml new file mode 100644 index 00000000..68bef76e --- /dev/null +++ b/app/src/main/res/layout/fragment_talk_tab.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 14817e39..c5748ebb 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -132,4 +132,5 @@ #EC3AA6 #7849BC #607D8B + #B0BEC5 diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index ae82149d..f81f6fbb 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -24,7 +24,8 @@