Files
sodalive-android/docs/plan-task/20260515_XMLTypography스타일추가.md

5.5 KiB

XML Typography 스타일 추가

작업 목표

  • XML 레이아웃에서 재사용할 수 있는 Typography 스타일 리소스를 추가한다.

구현 계획

Task 1: Typography 리소스 파일 추가

Files:

  • Create: app/src/main/res/values/typography.xml

  • Step 1: typography.xml 생성

<resources>
    <style name="Typography.Heading1">
        <item name="android:fontFamily">@font/bold</item>
        <item name="android:textSize">24sp</item>
    </style>
</resources>
  • Step 2: 요청된 13개 스타일 완성

Heading1-4, Body1-6, Caption1-3을 모두 추가하고 각 스타일은 android:fontFamily, android:textSize만 포함한다.

  • Step 3: 리소스 빌드 검증

Run: ./gradlew :app:assembleDebug Expected: BUILD SUCCESSFUL

Task 2: Typography 사용 샘플 문서화

Files:

  • Modify: docs/prd/20260515_typography_xml_style_prd.md

  • Modify: docs/plan-task/20260515_XMLTypography스타일추가.md

  • Step 1: XML 사용 샘플 추가

<TextView
    android:id="@+id/tv_title"
    style="@style/Typography.Heading1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="타이틀" />
  • Step 2: Kotlin 사용 샘플 추가
val textView = TextView(requireContext()).apply {
    text = "본문"
    setTextAppearance(R.style.Typography_Body3)
}
  • Step 3: Kotlin 리소스명 규칙 기록

XML 스타일명 Typography.Body3는 Kotlin R.style에서 Typography_Body3처럼 점(.) 대신 밑줄(_)로 참조한다.

체크리스트

  • AC1: Typography.Heading1부터 Typography.Heading4까지 4개 스타일이 존재한다.
    • QA: app/src/main/res/values/typography.xml에서 스타일명, textSize, fontFamily 확인
  • AC2: Typography.Body1부터 Typography.Body6까지 6개 스타일이 존재한다.
    • QA: app/src/main/res/values/typography.xml에서 스타일명, textSize, fontFamily 확인
  • AC3: Typography.Caption1부터 Typography.Caption3까지 3개 스타일이 존재한다.
    • QA: app/src/main/res/values/typography.xml에서 스타일명, textSize, fontFamily 확인
  • AC4: 기존 XML 레이아웃은 변경하지 않는다.
    • QA: 변경 파일 목록에서 레이아웃 XML 변경이 없는지 확인
  • AC5: 변경 파일 진단/빌드 검증을 수행한다.
    • QA: lsp_diagnostics, ./gradlew :app:assembleDebug
  • AC6: Typography 사용 샘플을 XML과 Kotlin 기준으로 확인할 수 있다.
    • QA: PRD 문서의 Usage Samples 섹션에서 style="@style/Typography.Heading1"R.style.Typography_Body3 확인

검증 기록

  • 2026-05-15
    • 무엇/왜/어떻게: 구현 전 계획 문서 작성. XML 기반 프로젝트이므로 Compose Typography 대신 values 리소스 스타일 추가로 범위를 한정했다.
    • 실행 명령/도구:
      • read(docs/prd/sample-prd.md)
      • read(app/src/main/res/values/themes.xml)
      • rg --files app/src/main/res/values
    • 결과:
      • PRD와 계획/TASK 문서를 기준으로 typography.xml 신규 생성 작업을 진행한다.
  • 2026-05-15
    • 무엇/왜/어떻게: app/src/main/res/values/typography.xml을 추가해 요청된 Heading, Body, Caption Typography 스타일 13개를 정의했다. Android 점 표기 스타일은 부모 스타일을 참조하므로 AAPT 리소스 링크 오류를 방지하기 위해 빈 베이스 스타일 Typography를 함께 추가했다.
    • 실행 명령/도구:
      • lsp_diagnostics(app/src/main/res/values/typography.xml)
      • ./gradlew :app:assembleDebug
      • rg("<style name=\"Typography\\.|android:textSize|android:fontFamily" app/src/main/res/values/typography.xml -n)
    • 결과:
      • XML LSP는 현재 환경에 설정되어 있지 않아 실행 불가(No LSP server configured for extension: .xml)였다.
      • 최초 빌드는 Typography.Heading1 등의 점 표기 스타일이 부모 Typography를 찾으면서 style/Typography not found로 실패했고, 원인 확인 후 빈 베이스 스타일 Typography를 추가했다.
      • ./gradlew :app:assembleDebugBUILD SUCCESSFUL로 완료되어 리소스 병합과 패키징이 정상 처리됐다.
      • rg 확인 결과 요청된 13개 Typography 스타일과 각 fontFamily, textSize가 모두 존재한다.
  • 2026-05-15
    • 무엇/왜/어떻게: 새 Typography 스타일을 실제 XML 또는 Kotlin 코드에서 어떻게 참조하는지 PRD와 계획 문서에 샘플로 기록했다. 기존 XML 관례는 style="@style/..." 형태이고, Kotlin의 R.style 심볼은 점 표기 스타일명이 밑줄 표기로 생성되는 점을 반영했다.
    • 실행 명령/도구:
      • rg("style=\"@style/|textAppearance=\"@style/|setTextAppearance|TextView\\(" app/src/main/res/layout app/src/main/java -n)
      • read(app/src/main/res/layout/activity_add_alarm.xml)
      • read(app/src/main/java/kr/co/vividnext/sodalive/chat/original/detail/OriginalWorkInfoFragment.kt)
      • rg("Typography_(Heading1|Body3|Caption2)|Typography\\.Body3|Typography\\.Heading1" app/build/generated app/build/intermediates -n)
    • 결과:
      • XML에서는 activity_add_alarm.xmlstyle="@style/AlarmDayCheckBox"처럼 루트 style 속성을 쓰는 기존 예시를 확인했다.
      • Kotlin에서는 기존 setTextAppearance() 사용처는 없고, OriginalWorkInfoFragment.kt에서 동적 TextViewtextSize를 직접 지정하는 패턴을 확인했다.
      • 빌드 산출물의 R.txt에서 Typography.Body3Typography_Body3 심볼로 생성되는 것을 확인했다.