# PRD: XML Typography 재사용 스타일 추가 ## 1. Overview XML 레이아웃 기반 화면에서 재사용할 수 있는 Typography 스타일 리소스를 추가한다. --- ## 2. Problem - 현재 TextView의 `android:fontFamily`와 `android:textSize`가 XML마다 개별 지정되어 있다. - 동일한 크기와 굵기를 반복 지정해 Typography 체계를 일관되게 재사용하기 어렵다. - Compose를 사용하지 않는 현재 구조에서는 XML 스타일 리소스로 공통 Typography를 제공해야 한다. --- ## 3. Goals - `Heading1`부터 `Heading4`까지 재사용 가능한 스타일을 제공한다. - `Body1`부터 `Body6`까지 재사용 가능한 스타일을 제공한다. - `Caption1`부터 `Caption3`까지 재사용 가능한 스타일을 제공한다. - 각 스타일은 요청된 글자 크기와 폰트 굵기만 정의한다. --- ## 4. Non-Goals - 기존 XML 레이아웃의 개별 `fontFamily` 또는 `textSize`를 일괄 교체하지 않는다. - Compose `Typography` 또는 Kotlin 테마 파일을 추가하지 않는다. - 색상, 줄간격, 자간, 마진, 패딩 등 요청되지 않은 시각 속성을 추가하지 않는다. --- ## 5. Target Users - XML 레이아웃을 작성하거나 유지보수하는 Android 개발자. --- ## 6. User Stories - 개발자는 `TextView`에 공통 Typography 스타일을 지정해 같은 크기와 굵기를 반복 정의하지 않고 재사용하고 싶다. - 개발자는 Heading, Body, Caption 계층을 이름으로 구분해 화면 텍스트 스타일을 일관되게 적용하고 싶다. --- ## 7. Core Features ### XML Typography Style Resource `app/src/main/res/values/typography.xml`에 다음 스타일을 추가한다. #### Requirements - Heading - `Typography.Heading1`: 24sp, `@font/bold` - `Typography.Heading2`: 22sp, `@font/bold` - `Typography.Heading3`: 20sp, `@font/bold` - `Typography.Heading4`: 18sp, `@font/bold` - Body - `Typography.Body1`: 16sp, `@font/bold` - `Typography.Body2`: 16sp, `@font/medium` - `Typography.Body3`: 16sp, `@font/regular` - `Typography.Body4`: 14sp, `@font/bold` - `Typography.Body5`: 14sp, `@font/medium` - `Typography.Body6`: 14sp, `@font/regular` - Caption - `Typography.Caption1`: 12sp, `@font/bold` - `Typography.Caption2`: 12sp, `@font/medium` - `Typography.Caption3`: 12sp, `@font/regular` #### Edge Cases - 기존 레이아웃에 스타일을 자동 적용하지 않으므로 화면 변화는 발생하지 않는다. - 폰트 리소스는 기존 `app/src/main/res/font`의 `bold`, `medium`, `regular`를 사용한다. --- ## 8. UX / UI Expectations - 새 스타일을 적용한 TextView는 정의된 크기와 폰트 굵기를 사용한다. - 기존 화면은 스타일을 명시적으로 교체하기 전까지 변경되지 않는다. ### Usage Samples XML 레이아웃에서는 `TextView`의 루트 속성에 `style`을 지정한다. `style`은 `android:` 네임스페이스를 붙이지 않는다. ```xml ``` 기존 프로젝트의 동적 `TextView` 생성 코드는 `textSize` 등을 직접 지정하고 있다. Kotlin에서 새 Typography 스타일을 적용해야 할 때는 생성한 `TextView`에 `setTextAppearance()`를 사용한다. XML 스타일명 `Typography.Body3`는 Kotlin `R.style`에서 `Typography_Body3`로 참조한다. ```kotlin val textView = TextView(requireContext()).apply { text = "본문" setTextAppearance(R.style.Typography_Body3) } ``` --- ## 9. Technical Constraints - 현재 프로젝트는 Compose가 아니라 XML 레이아웃 중심이므로 XML style 리소스로 구현한다. - 새 스타일은 `TextView`에서 `style="@style/Typography.Body3"` 형태로 사용할 수 있어야 한다. - Kotlin 코드에서는 `R.style.Typography_Body3`처럼 점(`.`) 대신 밑줄(`_`)로 변환된 리소스 이름을 사용한다. - 기존 `themes.xml`을 비대하게 만들지 않기 위해 Typography 전용 values XML 파일을 사용한다. --- ## 10. Metrics - Android 리소스 병합 및 디버그 빌드가 성공한다. - `typography.xml`에 요청된 13개 스타일이 모두 존재한다. --- ## 11. Open Questions - 없음. 현재 요청 범위에서는 기존 XML 교체 없이 스타일 리소스만 추가한다.