런타임 자산
ui/index.json은 시작 화면과 화면 목록을 지정합니다. 각 화면 정의는 ui/screens에서, bottom sheet는 ui/bottom_sheets에서 읽습니다. 현재 index의 entry는 home입니다.
{
"version": "1.0",
"entry": "home",
"screens": [
{ "id": "home", "file": "home.json", "label": "홈", "icon": "home" }
]
}
이 예제는 최소 구조를 보여줍니다. 현재 앱의 screenVault, 설문 화면, 바인딩 정보를 제거하는 용도로 사용하지 않습니다.
화면 노드
화면은 children에 노드를 배치합니다. unit과 type으로 renderer가 구현을 선택하고 props로 표시 속성을 전달합니다.
{
"id": "home",
"title": "홈",
"children": [{
"id": "intro",
"unit": "component",
"type": "Text",
"props": {
"text": "연구에 참여해 주셔서 감사합니다.",
"style": "bodyLarge"
}
}]
}
바인딩과 동작
bindingRef는 표시할 값과 상태를, actionRef는 사용자 동작을 기존 계약에 연결합니다. 식별자를 이름만으로 새로 만들면 런타임이 자동으로 처리하지 않습니다. 실제 자산과 바인딩·액션 구현의 연결을 확인해야 합니다.
설문 응답 가능 상태와 시작 동작은 단순 화면 표시 이상의 의미를 가지므로 기존 availability와 제출 경계를 유지합니다. 임시 UI 상태를 영속 데이터로 저장하지 않습니다.
새로운 노드를 추가할 때
- 기존 component/block으로 표현 가능한지 확인합니다.
- 필요한 경우 노드 구현과 JSON 정의를 추가합니다.
UiNodeRenderer에 등록하고 필요한 바인딩·액션만 확장합니다.- Android에서 화면 표시·입력·오류 상태를 확인합니다.
- shared contract 또는 공통 renderer를 사용하는 노드는 해당 규격도 맞춥니다.
테마는 기존 MaterialTheme과 DataCollectionTheme 경로를 따릅니다. 화면 전체를 새 하드코딩 Compose 흐름으로 바꾸는 것은 문서화나 단순 구성 변경의 선행 조건이 아닙니다.
컴포넌트 참고 자료
컴포넌트 카탈로그에서 연구 앱 화면을 구성할 때 참고할 컴포넌트 자료를 확인할 수 있습니다. 외부 참고 사이트이며, Android에서 사용할 때는 현재 JSON 노드·renderer·바인딩 구현과 함께 확인하세요.
참고 사이트는 현재 ChatGPT 로그인이 필요합니다.