# PRD: 타이틀바 및 탭 텍스트바 컴포넌트 ## 1. Overview XML 레이아웃 기반 화면에서 재사용할 수 있는 Title Bar Component와 Tab-Text Bar Component를 개발한다. --- ## 2. Problem - 화면마다 타이틀 영역과 탭 텍스트 영역을 개별 구현하면 높이, 배경색, 정렬, 텍스트 스타일이 달라질 수 있다. - Home 화면과 일반 화면의 타이틀 바 구조는 유사하지만 좌측 영역의 콘텐츠가 다르므로 재사용 가능한 변형이 필요하다. - 탭 텍스트 바는 최대 3개 메뉴와 단일 선택 상태를 일관되게 보장해야 한다. --- ## 3. Goals - 전체 너비, 높이 60dp, 검정 배경, 세로 가운데 정렬을 갖는 재사용 가능한 Title Bar Component를 제공한다. - Home Title Bar는 좌측에 `img_text_logo_v2`, 우측에 화면별로 교체 가능한 메뉴 아이콘을 배치할 수 있어야 한다. - Default Title Bar는 좌측에 화면명 텍스트, 우측에 화면별로 교체 가능한 메뉴 아이콘을 배치할 수 있어야 한다. - 전체 너비, 높이 52dp, 검정 배경, 세로 가운데 정렬을 갖는 재사용 가능한 Tab-Text Bar Component를 제공한다. - Tab-Text Bar는 최대 3개 메뉴를 지원하고 반드시 하나만 selected 상태가 되도록 설계한다. - Tab-Text Bar 텍스트는 `Typography.Heading3`을 사용하고 normal 색상은 `gray_600`, selected 색상은 white를 사용한다. --- ## 4. Non-Goals - 이번 범위에서는 실제 화면에 컴포넌트를 일괄 적용하지 않는다. - 신규 Activity, Fragment, ViewModel을 만들지 않는다. - Compose 컴포넌트 또는 Compose Theme를 추가하지 않는다. - 3개를 초과하는 탭 메뉴 지원, 스크롤 탭, 아이콘 탭, 배지 기능은 포함하지 않는다. - 메뉴 아이콘 클릭 시 수행할 화면별 비즈니스 로직은 컴포넌트 내부에 고정하지 않는다. - Figma에서 제공되지 않은 추가 애니메이션, 그림자, divider, pressed 효과는 추가하지 않는다. --- ## 5. Target Users - XML 레이아웃을 작성하거나 유지보수하는 Android 개발자. - 신규 v2 화면에서 공통 상단 바와 텍스트 탭 바를 재사용하려는 개발자. --- ## 6. User Stories - 개발자는 Home 화면에서 로고와 메뉴 아이콘이 포함된 상단 바를 반복 구현 없이 재사용하고 싶다. - 개발자는 일반 화면에서 화면명과 메뉴 아이콘이 포함된 상단 바를 같은 규격으로 사용하고 싶다. - 개발자는 화면별 요구에 맞게 우측 메뉴 아이콘을 교체하고 클릭 동작을 주입하고 싶다. - 개발자는 최대 3개 메뉴 중 하나만 선택되는 텍스트 탭 바를 재사용하고 싶다. --- ## 7. Core Features ### Title Bar Component 재사용 가능한 상단 타이틀 바를 XML 기반으로 제공한다. #### Requirements - Width: `match_parent` - Height: `60dp` - Alignment: 세로 가운데 정렬 - Background: black - 공통 구조는 `좌측 콘텐츠 영역` + `빈 영역` + `우측 메뉴 아이콘 영역`으로 구성한다. - 우측 메뉴 아이콘은 사용하는 화면마다 다른 drawable을 지정할 수 있어야 한다. - 우측 메뉴 아이콘은 없는 화면에서도 사용할 수 있도록 숨김 처리가 가능해야 한다. #### Home Title Bar - Figma: https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=20-3575&m=dev - 좌측 콘텐츠는 `img_text_logo_v2`를 표시한다. - 중앙 빈 영역은 가변 폭으로 남은 공간을 채운다. - 우측 메뉴 아이콘은 화면에서 교체 가능해야 한다. #### Default Title Bar - Figma: https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=20-3576&m=dev - 좌측 콘텐츠는 화면명 텍스트를 표시한다. - 화면명 텍스트는 사용하는 화면마다 변경 가능해야 한다. - 중앙 빈 영역은 가변 폭으로 남은 공간을 채운다. - 우측 메뉴 아이콘은 화면에서 교체 가능해야 한다. #### Edge Cases - 메뉴 아이콘이 없으면 우측 아이콘 영역을 숨기거나 클릭 불가능한 상태로 둔다. - Default Title Bar의 화면명이 비어 있으면 빈 텍스트 그대로 표시하지 않고 호출부에서 유효한 화면명을 제공해야 한다. - `img_text_logo_v2` 리소스가 없는 경우 구현 단계에서 기존 로고 리소스 존재 여부를 먼저 확인하고, 없으면 해당 리소스를 추가 대상으로 명시한다. ### Tab-Text Bar Component 최대 3개 텍스트 메뉴를 보여주는 재사용 가능한 탭 바를 XML 기반으로 제공한다. #### Requirements - Figma: https://www.figma.com/design/HmN1yNdJ3EIpqknFL0Hkab/-%EA%B3%B5%EC%9C%A0%EC%9A%A9-%EB%B3%B4%EC%9D%B4%EC%8A%A4%EC%98%A8-UI-UX-%EA%B8%B0%ED%9A%8D%EB%AC%B8%EC%84%9C?node-id=20-3585&m=dev - Width: `match_parent` - Height: `52dp` - Alignment: 세로 가운데 정렬 - Background: black - Typography: `Typography.Heading3` - Normal Color: `gray_600` - Selected Color: white - 메뉴 개수는 1개 이상 3개 이하만 허용한다. - 메뉴 선택 시 선택된 메뉴만 selected 상태가 되고 나머지는 normal 상태가 되어야 한다. - 초기 상태에서도 반드시 하나의 메뉴가 selected 상태여야 한다. #### Edge Cases - 메뉴가 0개이면 호출부 오류로 간주하고 컴포넌트 사용을 허용하지 않는다. - 메뉴가 4개 이상이면 호출부 오류로 간주하고 컴포넌트 사용을 허용하지 않는다. - selected index가 메뉴 범위를 벗어나면 첫 번째 메뉴를 selected로 보정하는 단순한 동작을 기본값으로 한다. --- ## 8. UX / UI Expectations - Title Bar와 Tab-Text Bar는 모두 검정 배경 위에서 세로 중앙 정렬되어야 한다. - Home Title Bar는 `img_text_logo_v2`와 우측 메뉴 아이콘 사이에 빈 영역이 자연스럽게 확장되어야 한다. - Default Title Bar는 화면명과 우측 메뉴 아이콘 사이에 빈 영역이 자연스럽게 확장되어야 한다. - Tab-Text Bar는 selected 텍스트가 white, normal 텍스트가 `gray_600`으로 명확히 구분되어야 한다. - 터치 가능한 메뉴 아이콘과 탭 텍스트는 화면별 클릭 핸들러를 연결할 수 있어야 한다. --- ## 9. Technical Constraints - 현재 프로젝트는 XML Views + ViewBinding 기반이므로 XML 레이아웃과 Kotlin View/ViewBinding 사용 패턴을 우선한다. - 재사용 레이아웃은 `app/src/main/res/layout` 아래에 둔다. - 기존 유사 패턴은 `toolbar_audio_content_main.xml`, `activity_audio_content_main.xml`, `activity_can_status.xml`, `fragment_message.xml`을 참고한다. - 색상은 기존 `colors.xml`의 black, white, `gray_600` 토큰을 사용한다. - Typography는 기존 `app/src/main/res/values/typography.xml`의 `Typography.Heading3`을 사용한다. - 기존 화면의 동작이나 레이아웃을 요청 없이 변경하지 않는다. --- ## 10. Metrics - Title Bar 높이 60dp와 Tab-Text Bar 높이 52dp가 문서와 구현에서 일치한다. - Home Title Bar와 Default Title Bar가 각각 요구된 좌측 콘텐츠를 지원한다. - 메뉴 아이콘과 화면명은 호출 화면에서 변경 가능하다. - Tab-Text Bar는 1~3개 메뉴만 허용하고 항상 하나의 selected 상태를 유지한다. - Android 리소스 병합 및 디버그 빌드가 성공한다. --- ## 11. Open Questions - Figma 조회는 현재 도구 타임아웃으로 확인하지 못했으므로, 구현 단계에서는 제공된 텍스트 요구사항을 우선 기준으로 삼는다. - `img_text_logo_v2`가 이미 drawable 리소스로 존재하는지 구현 전 확인이 필요하다.