feat(user-channel): 유저 채널의 라이브 아이템 UI 수정

This commit is contained in:
2025-10-16 19:00:46 +09:00
parent 2b8b581082
commit 9ba053b807
11 changed files with 407 additions and 149 deletions

View File

@@ -177,8 +177,8 @@ dependencies {
implementation "com.gauravk.audiovisualizer:audiovisualizer:0.9.2" implementation "com.gauravk.audiovisualizer:audiovisualizer:0.9.2"
// Glide // Glide
implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'com.github.bumptech.glide:glide:5.0.5'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:5.0.5'
implementation "com.michalsvec:single-row-calednar:1.0.0" implementation "com.michalsvec:single-row-calednar:1.0.0"

View File

@@ -15,6 +15,12 @@ data class GetCreatorProfileResponse(
val liveRoomList: List<LiveRoomResponse>, val liveRoomList: List<LiveRoomResponse>,
@SerializedName("contentList") @SerializedName("contentList")
val contentList: List<GetAudioContentListItem>, val contentList: List<GetAudioContentListItem>,
@SerializedName("latestContent")
val latestContent: GetAudioContentListItem?,
@SerializedName("totalContentCount")
val totalContentCount: Long,
@SerializedName("ownedContentCount")
val ownedContentCount: Long,
@SerializedName("notice") @SerializedName("notice")
val notice: String, val notice: String,
@SerializedName("communityPostList") @SerializedName("communityPostList")
@@ -64,6 +70,7 @@ data class LiveRoomResponse(
@SerializedName("content") val content: String, @SerializedName("content") val content: String,
@SerializedName("isPaid") val isPaid: Boolean, @SerializedName("isPaid") val isPaid: Boolean,
@SerializedName("beginDateTime") val beginDateTime: String, @SerializedName("beginDateTime") val beginDateTime: String,
@SerializedName("beginDateTimeUtc") val beginDateTimeUtc: String,
@SerializedName("coverImageUrl") val coverImageUrl: String, @SerializedName("coverImageUrl") val coverImageUrl: String,
@SerializedName("isAdult") val isAdult: Boolean, @SerializedName("isAdult") val isAdult: Boolean,
@SerializedName("price") val price: Int, @SerializedName("price") val price: Int,

View File

@@ -5,13 +5,16 @@ import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import coil.load import com.bumptech.glide.Glide
import coil.transform.RoundedCornersTransformation import com.bumptech.glide.load.MultiTransformation
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import kr.co.vividnext.sodalive.R import kr.co.vividnext.sodalive.R
import kr.co.vividnext.sodalive.databinding.ItemUserProfileLiveBinding import kr.co.vividnext.sodalive.databinding.ItemCreatorProfileLiveCardBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat
import kr.co.vividnext.sodalive.extensions.parseUtcIsoLocalDateTime
class UserProfileLiveAdapter( class UserProfileLiveAdapter(
private val onClickParticipant: (LiveRoomResponse) -> Unit, private val onClickParticipant: (LiveRoomResponse) -> Unit,
@@ -22,103 +25,87 @@ class UserProfileLiveAdapter(
inner class ViewHolder( inner class ViewHolder(
private val context: Context, private val context: Context,
private val binding: ItemUserProfileLiveBinding private val binding: ItemCreatorProfileLiveCardBinding
) : RecyclerView.ViewHolder(binding.root) { ) : RecyclerView.ViewHolder(binding.root) {
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
fun bind(item: LiveRoomResponse) { fun bind(item: LiveRoomResponse) {
binding.ivCover.load(item.coverImageUrl) { Glide.with(context)
crossfade(true) .load(item.coverImageUrl)
placeholder(R.drawable.ic_place_holder) .placeholder(R.drawable.ic_place_holder)
transformations(RoundedCornersTransformation(4.7f.dpToPx())) .transform(
} MultiTransformation(
CenterCrop(),
RoundedCorners(16f.dpToPx().toInt())
)
)
.into(binding.ivProfile)
binding.tvDate.text = item.beginDateTime
binding.tvNickname.text = item.managerNickname
binding.tvTitle.text = item.title binding.tvTitle.text = item.title
binding.tvNickname.text = item.managerNickname
val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
binding.tvDayOfWeek.text = dateMap["dayOfWeek"]
binding.ivLock.visibility = if (item.isPrivateRoom) {
View.VISIBLE
} else {
View.GONE
}
if (item.isActive && !item.channelName.isNullOrBlank()) { if (item.isActive && !item.channelName.isNullOrBlank()) {
binding.bgCover.visibility = View.GONE // on-air 상태인 라이브
binding.tvStatus.text = "LIVE" binding.tvOnAir.visibility = View.VISIBLE
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_ff5c49)) binding.llDate.visibility = View.GONE
binding.tvStatus.setBackgroundResource(
R.drawable.bg_round_corner_3_3_transparent_ff5c49
)
binding.tvParticipate.text = if (!item.isPaid && item.price > 0) { binding.tvTime.text = "On Air"
"${item.price}캔으로 지금 참여하기" binding.tvCompleteReservation.visibility = View.GONE
if (item.price <= 0) {
binding.llCan.visibility = View.GONE
binding.tvFree.visibility = View.VISIBLE
} else { } else {
"지금 참여하기" binding.tvFree.visibility = View.GONE
binding.llCan.visibility = View.VISIBLE
binding.tvCan.text = item.price.moneyFormat()
} }
binding.tvParticipate.setOnClickListener { onClickParticipant(item) }
binding.tvParticipate.setTextColor(
ContextCompat.getColor(
context,
R.color.white
)
)
binding.tvParticipate.setBackgroundResource(
R.drawable.bg_round_corner_5_3_dd4500
)
} else if (item.isActive && item.channelName.isNullOrBlank()) { } else if (item.isActive && item.channelName.isNullOrBlank()) {
binding.bgCover.visibility = View.GONE // on-air가 아닌 상태의 라이브
binding.tvStatus.text = "예정" binding.tvOnAir.visibility = View.GONE
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_fdca2f)) binding.llDate.visibility = View.VISIBLE
binding.tvStatus.setBackgroundResource(
R.drawable.bg_round_corner_3_3_transparent_fdca2f binding.tvTime.text = dateMap["time"]
) binding.tvMonth.text = "${dateMap["month"]}"
binding.tvDay.text = dateMap["day"]
if (item.isReservation) { if (item.isReservation) {
binding.tvParticipate.text = "예약완료" binding.llCan.visibility = View.GONE
binding.tvParticipate.setTextColor( binding.tvFree.visibility = View.GONE
ContextCompat.getColor(context, R.color.color_777777) binding.tvCompleteReservation.visibility = View.VISIBLE
) } else if (item.price <= 0) {
binding.tvParticipate.setBackgroundResource( binding.llCan.visibility = View.GONE
R.drawable.bg_round_corner_5_3_525252 binding.tvCompleteReservation.visibility = View.GONE
) binding.tvFree.visibility = View.VISIBLE
} else { } else {
binding.tvParticipate.text = if (item.price > 0) { binding.tvFree.visibility = View.GONE
"${item.price}캔으로 예약하기" binding.tvCompleteReservation.visibility = View.GONE
} else { binding.llCan.visibility = View.VISIBLE
"예약하기"
binding.tvCan.text = item.price.moneyFormat()
} }
binding.tvParticipate.setOnClickListener { onClickReservation(item) } binding.ivLock.visibility = if (item.isPrivateRoom) {
View.VISIBLE
binding.tvParticipate.setTextColor(
ContextCompat.getColor(
context,
R.color.black
)
)
binding.tvParticipate.setBackgroundResource(
R.drawable.bg_round_corner_5_3_fdca2f
)
}
} else { } else {
binding.bgCover.visibility = View.VISIBLE View.GONE
binding.tvStatus.text = "종료" }
binding.tvStatus.setTextColor(ContextCompat.getColor(context, R.color.color_777777))
binding.tvStatus.setBackgroundResource(
R.drawable.bg_round_corner_3_3_transparent_777777
)
binding.tvParticipate.text = "다시듣기를 지원하지 않습니다"
binding.tvParticipate.setTextColor(
ContextCompat.getColor(context, R.color.color_777777)
)
binding.tvParticipate.setBackgroundResource(
R.drawable.bg_round_corner_5_3_525252
)
} }
} }
} }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder( override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ViewHolder(
parent.context, parent.context,
ItemUserProfileLiveBinding.inflate( ItemCreatorProfileLiveCardBinding.inflate(
LayoutInflater.from(parent.context), LayoutInflater.from(parent.context),
parent, parent,
false false

View File

@@ -7,6 +7,7 @@ import java.text.NumberFormat
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.Currency import java.util.Currency
import java.util.Locale import java.util.Locale
import java.util.TimeZone
fun String.convertDateFormat( fun String.convertDateFormat(
from: String, from: String,
@@ -67,3 +68,31 @@ fun String.formatMoney(currencyCode: String, locale: Locale = Locale.getDefault(
val bd = this.toBigDecimal() val bd = this.toBigDecimal()
return nf.format(bd) return nf.format(bd)
} }
fun String.parseUtcIsoLocalDateTime(): Map<String, String> {
// 1. 서버가 내려준 포맷: "yyyy-MM-dd'T'HH:mm:ss"
val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
utcFormat.timeZone = TimeZone.getTimeZone("UTC") // 서버가 UTC 기준으로 보낸 것
// 2. Date 객체 생성
val date = utcFormat.parse(this)!!
// 3. 월 (1~12)
val month = SimpleDateFormat("M", Locale.getDefault()).format(date)
// 4. 일 (1~31)
val day = SimpleDateFormat("d", Locale.getDefault()).format(date)
// 5. 요일 (예: "Mon", "목")
val dayOfWeek = SimpleDateFormat("E", Locale.getDefault()).format(date)
// 6. 시간 (예: "AM 05:00")
val time = SimpleDateFormat("a hh:mm", Locale.getDefault()).format(date)
return mapOf(
"month" to month,
"day" to day,
"dayOfWeek" to dayOfWeek,
"time" to time
)
}

View File

@@ -14,10 +14,8 @@ import kr.co.vividnext.sodalive.databinding.ItemMyLiveReservationBinding
import kr.co.vividnext.sodalive.databinding.LiveBookingCardBinding import kr.co.vividnext.sodalive.databinding.LiveBookingCardBinding
import kr.co.vividnext.sodalive.extensions.dpToPx import kr.co.vividnext.sodalive.extensions.dpToPx
import kr.co.vividnext.sodalive.extensions.moneyFormat import kr.co.vividnext.sodalive.extensions.moneyFormat
import kr.co.vividnext.sodalive.extensions.parseUtcIsoLocalDateTime
import kr.co.vividnext.sodalive.live.GetRoomListResponse import kr.co.vividnext.sodalive.live.GetRoomListResponse
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.TimeZone
class LiveReservationAdapter( class LiveReservationAdapter(
private val isMain: Boolean = false, private val isMain: Boolean = false,
@@ -82,7 +80,7 @@ class LiveReservationAdapter(
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n")
fun bind(item: GetRoomListResponse) { fun bind(item: GetRoomListResponse) {
val dateMap = parseUtcIsoLocalDateTime(item.beginDateTimeUtc) val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
Glide Glide
.with(context) .with(context)
@@ -137,7 +135,7 @@ class LiveReservationAdapter(
View.GONE View.GONE
} }
val dateMap = parseUtcIsoLocalDateTime(item.beginDateTimeUtc) val dateMap = item.beginDateTimeUtc.parseUtcIsoLocalDateTime()
Glide Glide
.with(context) .with(context)
@@ -173,32 +171,4 @@ class LiveReservationAdapter(
binding.root.setOnClickListener { onClick(item) } binding.root.setOnClickListener { onClick(item) }
} }
} }
private fun parseUtcIsoLocalDateTime(utcString: String): Map<String, String> {
// 1. 서버가 내려준 포맷: "yyyy-MM-dd'T'HH:mm:ss"
val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault())
utcFormat.timeZone = TimeZone.getTimeZone("UTC") // 서버가 UTC 기준으로 보낸 것
// 2. Date 객체 생성
val date = utcFormat.parse(utcString)!!
// 3. 월 (1~12)
val month = SimpleDateFormat("M", Locale.getDefault()).format(date)
// 4. 일 (1~31)
val day = SimpleDateFormat("d", Locale.getDefault()).format(date)
// 5. 요일 (예: "Mon", "목")
val dayOfWeek = SimpleDateFormat("E", Locale.getDefault()).format(date)
// 6. 시간 (예: "AM 05:00")
val time = SimpleDateFormat("a hh:mm", Locale.getDefault()).format(date)
return mapOf(
"month" to month,
"day" to day,
"dayOfWeek" to dayOfWeek,
"time" to time
)
}
} }

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/color_3bb9f1" />
<corners android:radius="12dp" />
<stroke
android:width="1dp"
android:color="@color/color_3bb9f1" />
</shape>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FF5C49" />
<corners android:radius="999dp" />
</shape>

View File

@@ -65,21 +65,6 @@
android:textSize="32sp" android:textSize="32sp"
tools:text="김상담김상담김상담" /> tools:text="김상담김상담김상담" />
<TextView
android:id="@+id/tv_follower_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="6.7dp"
android:background="@drawable/bg_round_corner_16_7_transparent_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
android:text="팔로워 리스트"
android:textColor="@color/white"
android:textSize="12sp"
android:visibility="gone" />
<ImageView <ImageView
android:id="@+id/iv_notification" android:id="@+id/iv_notification"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@@ -97,7 +82,22 @@
android:fontFamily="@font/pretendard_medium" android:fontFamily="@font/pretendard_medium"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="16sp" android:textSize="16sp"
android:visibility="gone"
tools:text="팔로워 1,000명" /> tools:text="팔로워 1,000명" />
<TextView
android:id="@+id/tv_follower_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:background="@drawable/bg_round_corner_999_white"
android:fontFamily="@font/pretendard_bold"
android:gravity="center"
android:paddingVertical="8dp"
android:text="팔로워 리스트"
android:textColor="@color/black"
android:textSize="16sp"
android:visibility="gone" />
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,251 @@
<?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="@drawable/live_booking_card_background"
android:padding="14dp">
<ImageView
android:id="@+id/iv_profile"
android:layout_width="107dp"
android:layout_height="107dp"
android:contentDescription="@null"
android:scaleType="centerCrop"
android:src="@drawable/ic_placeholder_profile"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@tools:sample/avatars" />
<ImageView
android:id="@+id/iv_lock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="4dp"
android:background="@drawable/bg_circle_b3333333"
android:contentDescription="@null"
android:padding="4dp"
android:src="@drawable/ic_lock"
android:visibility="gone"
app:layout_constraintStart_toStartOf="@+id/iv_profile"
app:layout_constraintTop_toTopOf="@+id/iv_profile" />
<!-- Content Area -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_weight="1"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@+id/iv_profile"
app:layout_constraintEnd_toStartOf="@+id/fl_on_air_or_date"
app:layout_constraintStart_toEndOf="@+id/iv_profile"
app:layout_constraintTop_toTopOf="@+id/iv_profile">
<!-- Title -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular"
android:textColor="#FFFFFF"
android:textSize="18sp"
tools:text="우기라스" />
</LinearLayout>
<!-- Content -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="8dp"
android:ellipsize="end"
android:fontFamily="@font/pretendard_regular"
android:maxLines="1"
android:textColor="#B0BEC5"
android:textSize="14sp"
tools:text="평범한 가족의 아슬아슬한 이중생활..." />
<!-- Time Info -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_day_of_week"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular"
android:textColor="#78909C"
android:textSize="14sp"
tools:text="월" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:fontFamily="@font/pretendard_regular"
android:text="|"
android:textColor="#78909C"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular"
android:textColor="#98A2F6"
android:textSize="14sp"
tools:text="오후 03:30" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<FrameLayout
android:id="@+id/fl_on_air_or_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<!-- OnAir Area -->
<TextView
android:id="@+id/tv_on_air"
android:layout_width="52dp"
android:layout_height="52dp"
android:background="@drawable/bg_round_corner_999_ff5c49"
android:fontFamily="@font/pretendard_bold"
android:gravity="center"
android:text="ON\nAIR"
android:textColor="@color/white"
android:visibility="gone" />
<!-- Date Area -->
<LinearLayout
android:id="@+id/ll_date"
android:layout_width="52dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<!-- Month -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/date_month_background"
android:gravity="center"
android:paddingVertical="4dp">
<TextView
android:id="@+id/tv_month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_bold"
android:lineSpacingMultiplier="1.2"
android:textColor="#FFFFFF"
android:textSize="14sp"
android:textStyle="bold"
tools:text="6월" />
</LinearLayout>
<!-- Day -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/date_day_background"
android:gravity="center"
android:paddingVertical="4dp">
<TextView
android:id="@+id/tv_day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_bold"
android:lineSpacingMultiplier="1.2"
android:textColor="#263238"
android:textSize="16sp"
tools:text="27" />
</LinearLayout>
</LinearLayout>
</FrameLayout>
<!-- Payment Status -->
<LinearLayout
android:id="@+id/ll_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/payment_background"
android:gravity="center_vertical"
android:minWidth="52dp"
android:orientation="horizontal"
android:paddingHorizontal="4dp"
android:paddingVertical="2dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<ImageView
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginEnd="2dp"
android:contentDescription="@null"
android:src="@drawable/ic_can" />
<TextView
android:id="@+id/tv_can"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/pretendard_regular"
android:textColor="#FFFFFF"
android:textSize="14sp"
tools:text="300" />
</LinearLayout>
<TextView
android:id="@+id/tv_complete_reservation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/reservation_complete_background"
android:fontFamily="@font/pretendard_regular"
android:minWidth="52dp"
android:padding="4dp"
android:text="예약완료"
android:textColor="#FFF"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_free"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/payment_free_background"
android:fontFamily="@font/pretendard_regular"
android:gravity="center"
android:minWidth="52dp"
android:padding="4dp"
android:text="무료"
android:textColor="#263238"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -14,17 +14,17 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/pretendard_bold"
android:text="콘텐츠" android:text="콘텐츠"
android:textColor="@color/color_eeeeee" android:textColor="@color/white"
android:textSize="16.7sp" /> android:textSize="26sp" />
<TextView <TextView
android:id="@+id/tv_all" android:id="@+id/tv_all"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:fontFamily="@font/gmarket_sans_light" android:fontFamily="@font/pretendard_light"
android:gravity="center" android:gravity="center"
android:text="전체보기" android:text="전체보기"
android:textColor="@color/color_bbbbbb" android:textColor="@color/color_bbbbbb"
@@ -37,7 +37,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="21.3dp" android:layout_marginTop="21.3dp"
android:background="@drawable/bg_round_corner_4_7_3bb9f1" android:background="@drawable/bg_round_corner_4_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/pretendard_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="17dp" android:paddingVertical="17dp"
android:text="새로운 콘텐츠 등록하기" android:text="새로운 콘텐츠 등록하기"

View File

@@ -8,10 +8,10 @@
android:id="@+id/tv_title" android:id="@+id/tv_title"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/pretendard_bold"
android:text="라이브" android:text="라이브"
android:textColor="@color/color_eeeeee" android:textColor="@color/white"
android:textSize="16.7sp" android:textSize="26sp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@@ -19,7 +19,7 @@
android:id="@+id/ll_roulette_menu" android:id="@+id/ll_roulette_menu"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="21.3dp" android:layout_marginTop="14dp"
android:orientation="horizontal" android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@@ -30,35 +30,35 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:background="@drawable/bg_round_corner_4_7_3bb9f1" android:background="@drawable/bg_round_corner_12_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold" android:fontFamily="@font/pretendard_bold"
android:gravity="center" android:gravity="center"
android:paddingVertical="17dp" android:paddingVertical="12dp"
android:text="룰렛 설정" android:text="룰렛 설정"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="14.7sp" /> android:textSize="16sp" />
<TextView <TextView
android:id="@+id/tv_setting_menu" android:id="@+id/tv_setting_menu"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_4_7_3bb9f1"
android:fontFamily="@font/gmarket_sans_bold"
android:gravity="center"
android:paddingVertical="17dp"
android:layout_marginStart="8dp" android:layout_marginStart="8dp"
android:layout_weight="1"
android:background="@drawable/bg_round_corner_12_3bb9f1"
android:fontFamily="@font/pretendard_bold"
android:gravity="center"
android:paddingVertical="12dp"
android:text="메뉴 설정" android:text="메뉴 설정"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="14.7sp" /> android:textSize="16sp" />
</LinearLayout> </LinearLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_live" android:id="@+id/rv_live"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginVertical="14dp"
android:clipToPadding="false" android:clipToPadding="false"
android:paddingVertical="20dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_roulette_menu" /> app:layout_constraintTop_toBottomOf="@+id/ll_roulette_menu" />