feat(creator): 커뮤니티 탭 레이아웃을 추가한다

This commit is contained in:
2026-06-22 00:36:21 +09:00
parent d6b49eb3e8
commit 6ae28e4d84
6 changed files with 482 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black">
<LinearLayout
android:id="@+id/layout_creator_channel_community_sort_bar"
android:layout_width="0dp"
android:layout_height="52dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="@dimen/spacing_14"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/tv_creator_channel_community_total_label"
style="@style/Typography.Body2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="@string/creator_channel_live_total_label"
android:textColor="@color/white" />
<TextView
android:id="@+id/tv_creator_channel_community_total_count"
style="@style/Typography.Body2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_4"
android:layout_weight="1"
android:includeFontPadding="false"
android:textColor="@color/gray_500"
tools:text="23" />
<LinearLayout
android:id="@+id/layout_creator_channel_community_view_mode_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_creator_channel_community_view_mode_label"
style="@style/Typography.Body3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:textColor="@color/gray_400"
tools:text="리스트형" />
<ImageView
android:id="@+id/iv_creator_channel_community_view_mode"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginStart="@dimen/spacing_4"
android:contentDescription="@null"
android:src="@drawable/ic_new_list" />
</LinearLayout>
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_creator_channel_community"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:nestedScrollingEnabled="false"
android:paddingHorizontal="@dimen/spacing_14"
android:paddingTop="@dimen/spacing_8"
android:paddingBottom="@dimen/spacing_32"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_creator_channel_community_sort_bar"
tools:itemCount="3"
tools:listitem="@layout/item_creator_channel_community_list" />
<FrameLayout
android:id="@+id/layout_creator_channel_community_empty"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingTop="@dimen/spacing_48"
android:paddingBottom="@dimen/spacing_32"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<TextView
android:id="@+id/tv_creator_channel_community_empty_message"
style="@style/Typography.Body3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center_horizontal"
android:gravity="center"
android:text="@string/creator_channel_community_empty_message"
android:textColor="@color/gray_500" />
</FrameLayout>
<TextView
android:id="@+id/tv_creator_channel_community_error_message"
style="@style/Typography.Body3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/creator_channel_community_error_message"
android:textColor="@color/gray_500"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/btn_creator_channel_community_retry"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/btn_creator_channel_community_retry"
style="@style/Typography.Body5"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_marginTop="@dimen/spacing_14"
android:background="@drawable/bg_creator_channel_live_retry"
android:gravity="center"
android:minWidth="96dp"
android:paddingHorizontal="@dimen/spacing_20"
android:text="@string/creator_channel_community_retry_button"
android:textColor="@color/white"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_creator_channel_community_error_message" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,104 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout_creator_channel_community_grid_root"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="@dimen/spacing_4"
android:background="@drawable/bg_feed_card"
app:layout_constraintDimensionRatio="1:1">
<ImageView
android:id="@+id/iv_creator_channel_community_grid_image"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/bg_feed_community_image"
android:contentDescription="@string/a11y_feed_content_image"
android:scaleType="centerCrop"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_launcher_background"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_creator_channel_community_grid_text_preview"
style="@style/Typography.Caption2"
android:layout_width="0dp"
android:layout_height="0dp"
android:ellipsize="end"
android:gravity="center"
android:includeFontPadding="false"
android:maxLines="4"
android:padding="@dimen/spacing_12"
android:textColor="@color/gray_400"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="텍스트만 있는 게시물"
tools:visibility="visible" />
<View
android:id="@+id/layout_creator_channel_community_grid_locked_overlay"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/color_26909090"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_creator_channel_community_grid_lock"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_community_lock"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_creator_channel_community_grid_lock_price"
style="@style/Typography.Caption2"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginBottom="@dimen/spacing_12"
android:background="@drawable/bg_creator_channel_community_price"
android:drawableStart="@drawable/ic_bar_cash"
android:drawablePadding="@dimen/spacing_4"
android:gravity="center"
android:includeFontPadding="false"
android:paddingHorizontal="@dimen/spacing_8"
android:textColor="@color/black"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="30"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_creator_channel_community_grid_notice"
style="@style/Typography.Caption2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacing_8"
android:includeFontPadding="false"
android:text="@string/creator_channel_community_notice"
android:textColor="@color/soda_400"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,232 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/spacing_14"
android:background="@drawable/bg_feed_card"
android:orientation="vertical"
android:padding="@dimen/spacing_14">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_creator_channel_community_list_profile"
android:layout_width="42dp"
android:layout_height="42dp"
android:contentDescription="@string/a11y_feed_profile_image"
android:scaleType="centerCrop"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_launcher_background" />
<TextView
android:id="@+id/tv_creator_channel_community_list_nickname"
style="@style/Typography.Body5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_8"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:textColor="@color/white"
app:layout_constraintEnd_toStartOf="@id/layout_creator_channel_community_list_top_actions"
app:layout_constraintStart_toEndOf="@id/iv_creator_channel_community_list_profile"
app:layout_constraintTop_toTopOf="@id/iv_creator_channel_community_list_profile"
tools:text="크리에이터 이름" />
<TextView
android:id="@+id/tv_creator_channel_community_list_time"
style="@style/Typography.Body6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="1"
android:textColor="@color/gray_500"
app:layout_constraintEnd_toEndOf="@id/tv_creator_channel_community_list_nickname"
app:layout_constraintStart_toStartOf="@id/tv_creator_channel_community_list_nickname"
app:layout_constraintTop_toBottomOf="@id/tv_creator_channel_community_list_nickname"
tools:text="2분 전" />
<LinearLayout
android:id="@+id/layout_creator_channel_community_list_top_actions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/iv_creator_channel_community_list_profile"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/iv_creator_channel_community_list_profile"
tools:visibility="visible">
<TextView
android:id="@+id/tv_creator_channel_community_list_top_price"
style="@style/Typography.Body5"
android:layout_width="wrap_content"
android:layout_height="36dp"
android:background="@drawable/bg_creator_channel_community_price"
android:drawableStart="@drawable/ic_bar_cash"
android:drawablePadding="@dimen/spacing_4"
android:gravity="center"
android:includeFontPadding="false"
android:paddingHorizontal="@dimen/spacing_12"
android:textColor="@color/black"
android:visibility="gone"
tools:text="30"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_creator_channel_community_list_owner_more"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="@dimen/spacing_4"
android:contentDescription="@null"
android:src="@drawable/ic_new_more"
android:visibility="gone"
tools:visibility="visible" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/tv_creator_channel_community_list_notice"
style="@style/Typography.Caption2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_14"
android:includeFontPadding="false"
android:text="@string/creator_channel_community_notice"
android:textColor="@color/soda_400"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_creator_channel_community_list_body"
style="@style/Typography.Body3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/spacing_12"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxLines="5"
android:textColor="@color/white"
tools:text="크리에이터가 커뮤니티에 올린 글이 보이는 부분" />
<FrameLayout
android:id="@+id/layout_creator_channel_community_list_image_container"
android:layout_width="match_parent"
android:layout_height="236dp"
android:layout_marginTop="@dimen/spacing_14"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/iv_creator_channel_community_list_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_feed_community_image"
android:contentDescription="@string/a11y_feed_content_image"
android:scaleType="centerCrop"
tools:src="@drawable/ic_launcher_background" />
<View
android:id="@+id/layout_creator_channel_community_list_locked_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/color_26909090"
android:visibility="gone"
tools:visibility="visible" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_creator_channel_community_list_lock"
android:layout_width="24dp"
android:layout_height="24dp"
android:contentDescription="@null"
android:src="@drawable/ic_new_community_lock"
android:visibility="gone"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_creator_channel_community_list_locked_price"
style="@style/Typography.Caption2"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginTop="@dimen/spacing_12"
android:background="@drawable/bg_creator_channel_community_price"
android:drawableStart="@drawable/ic_bar_cash"
android:drawablePadding="@dimen/spacing_4"
android:gravity="center"
android:includeFontPadding="false"
android:paddingHorizontal="@dimen/spacing_8"
android:textColor="@color/black"
android:visibility="gone"
tools:text="30"
tools:visibility="visible" />
</LinearLayout>
<ImageView
android:id="@+id/iv_creator_channel_community_list_play"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"
android:contentDescription="@null"
android:src="@drawable/ic_new_player_play"
android:visibility="gone"
tools:visibility="visible" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_marginTop="@dimen/spacing_16"
android:gravity="center_vertical"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_creator_channel_community_list_comment"
android:layout_width="18dp"
android:layout_height="18dp"
android:contentDescription="@null"
android:src="@drawable/ic_feed_community_reply" />
<TextView
android:id="@+id/tv_creator_channel_community_list_comment_count"
style="@style/Typography.Body3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_4"
android:includeFontPadding="false"
android:textColor="@color/gray_400"
tools:text="5" />
<ImageView
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_marginStart="15dp"
android:contentDescription="@null"
android:src="@drawable/ic_feed_community_heart" />
<TextView
android:id="@+id/tv_creator_channel_community_list_like_count"
style="@style/Typography.Body3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/spacing_4"
android:layout_weight="1"
android:includeFontPadding="false"
android:textColor="@color/gray_400"
tools:text="6" />
</LinearLayout>
</LinearLayout>

View File

@@ -323,6 +323,10 @@
<string name="creator_channel_community_summary">%1$s · Likes %2$d · Comments %3$d</string> <string name="creator_channel_community_summary">%1$s · Likes %2$d · Comments %3$d</string>
<string name="creator_channel_community_view_mode_list">List</string> <string name="creator_channel_community_view_mode_list">List</string>
<string name="creator_channel_community_view_mode_grid">Thumbnail</string> <string name="creator_channel_community_view_mode_grid">Thumbnail</string>
<string name="creator_channel_community_empty_message">The creator is preparing community posts.\nPlease look forward to it!</string>
<string name="creator_channel_community_error_message">Could not load community.</string>
<string name="creator_channel_community_retry_button">Retry</string>
<string name="creator_channel_community_notice">Notice</string>
<string name="creator_channel_fantalk_summary">%1$s · Total %2$d</string> <string name="creator_channel_fantalk_summary">%1$s · Total %2$d</string>
<string name="creator_channel_fantalk_empty_title">Be the first\nto cheer them on!</string> <string name="creator_channel_fantalk_empty_title">Be the first\nto cheer them on!</string>
<string name="creator_channel_fantalk_support_action">Leave support</string> <string name="creator_channel_fantalk_support_action">Leave support</string>

View File

@@ -323,6 +323,10 @@
<string name="creator_channel_community_summary">%1$s · いいね %2$d · コメント %3$d</string> <string name="creator_channel_community_summary">%1$s · いいね %2$d · コメント %3$d</string>
<string name="creator_channel_community_view_mode_list">リスト型</string> <string name="creator_channel_community_view_mode_list">リスト型</string>
<string name="creator_channel_community_view_mode_grid">サムネイル型</string> <string name="creator_channel_community_view_mode_grid">サムネイル型</string>
<string name="creator_channel_community_empty_message">クリエイターがコミュニティを準備中です。\n楽しみにお待ちください!</string>
<string name="creator_channel_community_error_message">コミュニティを読み込めませんでした。</string>
<string name="creator_channel_community_retry_button">再試行</string>
<string name="creator_channel_community_notice">お知らせ</string>
<string name="creator_channel_fantalk_summary">%1$s · 全体 %2$d</string> <string name="creator_channel_fantalk_summary">%1$s · 全体 %2$d</string>
<string name="creator_channel_fantalk_empty_title">最初の応援を\n待っています</string> <string name="creator_channel_fantalk_empty_title">最初の応援を\n待っています</string>
<string name="creator_channel_fantalk_support_action">応援を残す</string> <string name="creator_channel_fantalk_support_action">応援を残す</string>

View File

@@ -322,6 +322,10 @@
<string name="creator_channel_community_summary">%1$s · 좋아요 %2$d · 댓글 %3$d</string> <string name="creator_channel_community_summary">%1$s · 좋아요 %2$d · 댓글 %3$d</string>
<string name="creator_channel_community_view_mode_list">리스트형</string> <string name="creator_channel_community_view_mode_list">리스트형</string>
<string name="creator_channel_community_view_mode_grid">썸네일형</string> <string name="creator_channel_community_view_mode_grid">썸네일형</string>
<string name="creator_channel_community_empty_message">크리에이터가 커뮤니티를 준비 중입니다.\n기대해 주세요!</string>
<string name="creator_channel_community_error_message">커뮤니티를 불러오지 못했습니다.</string>
<string name="creator_channel_community_retry_button">다시 시도</string>
<string name="creator_channel_community_notice">공지</string>
<string name="creator_channel_fantalk_summary">%1$s · 전체 %2$d</string> <string name="creator_channel_fantalk_summary">%1$s · 전체 %2$d</string>
<string name="creator_channel_fantalk_empty_title">당신의 첫 응원을\n기다리고 있어요!</string> <string name="creator_channel_fantalk_empty_title">당신의 첫 응원을\n기다리고 있어요!</string>
<string name="creator_channel_fantalk_support_action">응원 남기기</string> <string name="creator_channel_fantalk_support_action">응원 남기기</string>