feat(widget): 오디오 콘텐츠 카드 배지를 정리한다

This commit is contained in:
2026-06-02 19:00:13 +09:00
parent bd475d1c87
commit b402025ca5
4 changed files with 185 additions and 28 deletions

View File

@@ -115,6 +115,11 @@ class AudioContentCardView @JvmOverloads constructor(
private fun createIconTag(drawableResId: Int): ImageView {
return ImageView(context).apply {
id = when (drawableResId) {
R.drawable.ic_content_tag_original -> R.id.iv_audio_content_tag_original
R.drawable.ic_content_tag_point -> R.id.iv_audio_content_tag_point
else -> View.NO_ID
}
setImageResource(drawableResId)
contentDescription = null
importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_NO
@@ -124,9 +129,20 @@ class AudioContentCardView @JvmOverloads constructor(
private fun createFirstTag(): LinearLayout {
return LinearLayout(context).apply {
id = R.id.ll_audio_content_tag_first
orientation = HORIZONTAL
background = ContextCompat.getDrawable(context, R.drawable.bg_audio_content_tag_first)
layoutParams = LinearLayout.LayoutParams(FIRST_TAG_WIDTH_DP.dpToPx(), TAG_HEIGHT_DP.dpToPx())
gravity = Gravity.CENTER
setPadding(
FIRST_TAG_PADDING_DP.dpToPx(),
FIRST_TAG_PADDING_DP.dpToPx(),
FIRST_TAG_PADDING_DP.dpToPx(),
FIRST_TAG_PADDING_DP.dpToPx()
)
layoutParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
TAG_HEIGHT_DP.dpToPx()
)
addView(createFirstStarView())
addView(createFirstTextView())
}
@@ -137,10 +153,7 @@ class AudioContentCardView @JvmOverloads constructor(
setImageResource(R.drawable.ic_content_tag_first_star)
contentDescription = null
importantForAccessibility = IMPORTANT_FOR_ACCESSIBILITY_NO
layoutParams = LinearLayout.LayoutParams(FIRST_STAR_SIZE_DP.dpToPx(), FIRST_STAR_SIZE_DP.dpToPx()).apply {
marginStart = 2.dpToPx()
topMargin = 4.dpToPx()
}
layoutParams = LinearLayout.LayoutParams(FIRST_STAR_SIZE_DP.dpToPx(), FIRST_STAR_SIZE_DP.dpToPx())
}
}
@@ -151,29 +164,27 @@ class AudioContentCardView @JvmOverloads constructor(
setTextColor(ContextCompat.getColor(context, R.color.white))
textSize = 16f
isSingleLine = true
includeFontPadding = false
includeFontPadding = true
gravity = Gravity.CENTER_VERTICAL
layoutParams = LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
marginStart = 1.dpToPx()
topMargin = 2.dpToPx()
marginStart = FIRST_TEXT_MARGIN_START_DP.dpToPx()
}
}
}
private fun createFreeTag(): TextView {
return TextView(context).apply {
id = R.id.tv_audio_content_tag_free
text = context.getString(R.string.audio_content_tag_free)
background = ContextCompat.getDrawable(context, R.drawable.bg_audio_content_tag_free)
setTextColor(ContextCompat.getColor(context, R.color.white))
textSize = 14f
setTextAppearance(R.style.Typography_Body4)
gravity = Gravity.CENTER
isSingleLine = true
includeFontPadding = false
minWidth = FREE_TAG_MIN_WIDTH_DP.dpToPx()
setPadding(FREE_TAG_HORIZONTAL_PADDING_DP.dpToPx(), 0, FREE_TAG_HORIZONTAL_PADDING_DP.dpToPx(), 0)
layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, TAG_HEIGHT_DP.dpToPx())
}
}
@@ -216,10 +227,9 @@ class AudioContentCardView @JvmOverloads constructor(
private companion object {
const val TITLE_CREATOR_GAP_DP = 2
const val TAG_HEIGHT_DP = 24
const val FIRST_TAG_WIDTH_DP = 62
const val FIRST_STAR_SIZE_DP = 17
const val FREE_TAG_MIN_WIDTH_DP = 34
const val FREE_TAG_HORIZONTAL_PADDING_DP = 6
const val FIRST_TAG_PADDING_DP = 4
const val FIRST_TEXT_MARGIN_START_DP = 2
const val FIRST_TEXT = "FIRST"
}
}

View File

@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#052742" />
<padding
android:left="4dp"
android:right="4dp" />
</shape>

View File

@@ -21,39 +21,40 @@
<LinearLayout
android:id="@+id/ll_audio_content_tag_top"
android:layout_width="wrap_content"
android:layout_height="@dimen/spacing_24"
android:layout_height="wrap_content"
android:layout_gravity="top|start"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/iv_audio_content_tag_original"
android:layout_width="@dimen/spacing_24"
android:layout_height="@dimen/spacing_24"
android:contentDescription="@null"
android:src="@drawable/ic_content_tag_original" />
<LinearLayout
android:layout_width="62dp"
android:id="@+id/ll_audio_content_tag_first"
android:layout_width="wrap_content"
android:layout_height="@dimen/spacing_24"
android:background="@drawable/bg_audio_content_tag_first"
android:orientation="horizontal">
android:gravity="center"
android:orientation="horizontal"
android:paddingHorizontal="4dp">
<ImageView
android:layout_width="17dp"
android:layout_height="17dp"
android:layout_marginStart="2dp"
android:layout_marginTop="4dp"
android:contentDescription="@null"
android:src="@drawable/ic_content_tag_first_star" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="1dp"
android:layout_marginTop="2dp"
android:layout_marginStart="2dp"
android:fontFamily="@font/phosphate_solid"
android:includeFontPadding="false"
android:includeFontPadding="true"
android:singleLine="true"
android:text="FIRST"
android:textColor="@color/white"
@@ -65,30 +66,30 @@
<LinearLayout
android:id="@+id/ll_audio_content_tag_bottom"
android:layout_width="wrap_content"
android:layout_height="@dimen/spacing_24"
android:layout_height="wrap_content"
android:layout_gravity="bottom|start"
android:orientation="horizontal"
android:visibility="gone"
tools:ignore="UseCompoundDrawables"
tools:visibility="visible">
<ImageView
android:id="@+id/iv_audio_content_tag_point"
android:layout_width="@dimen/spacing_24"
android:layout_height="@dimen/spacing_24"
android:contentDescription="@null"
android:src="@drawable/ic_content_tag_point" />
<TextView
android:id="@+id/tv_audio_content_tag_free"
style="@style/Typography.Body4"
android:layout_width="wrap_content"
android:layout_height="@dimen/spacing_24"
android:background="@drawable/bg_audio_content_tag_free"
android:gravity="center"
android:includeFontPadding="false"
android:minWidth="34dp"
android:paddingHorizontal="6dp"
android:singleLine="true"
android:text="@string/audio_content_tag_free"
android:textColor="@color/white"
android:textSize="14sp" />
android:textColor="@color/white" />
</LinearLayout>
</FrameLayout>