앱 MVP Android 키보드 전환: 입력창·CTA·완료 상태를 나누는 5가지 기준
앱 MVP Android 키보드 전환: 입력창·CTA·완료 상태를 나누는 5가지 기준
Android MVP에서 채팅, 검색, 주소 입력처럼 키보드가 열리는 화면은 “입력은 된다”만으로 끝나지 않습니다. 키보드가 올라왔을 때 입력창과 전송·저장 버튼이 가려지지 않는지, 닫힌 뒤 화면이 원래 자리로 돌아오는지, 제출 완료 뒤 어느 상태를 보여 주는지까지 따로 확인해야 합니다. 이 글은 정적인 엣지투엣지 레이아웃 일반론이 아니라, 화면 키보드(IME)가 열리고 닫히는 전환을 검수하는 기준을 정리합니다.
Android Developers는 엣지투엣지 화면에서 앱 콘텐츠가 시스템 UI 뒤에 놓일 수 있으므로 중요한 조작 요소가 가려지지 않도록 inset을 처리해야 한다고 안내합니다. 키보드는 그 inset이 동적으로 바뀌는 대표 사례입니다. 따라서 “키보드가 보인다”와 “사용자가 핵심 행동을 끝낼 수 있다”는 같은 완료 상태가 아닙니다.
먼저 답하기: 키보드 전환의 목표는 화면을 위로 밀어 올리는 것이 아니라 핵심 조작을 계속 가능하게 하는 것입니다
키보드가 뜰 때 모든 화면을 동일한 거리로 이동시키면, 읽기 전용 정보까지 과도하게 흔들리거나 이미 안전 영역을 적용한 컨테이너에 여백이 중복될 수 있습니다. 반대로 아무 처리도 하지 않으면 하단 입력창, 전송 버튼, 다음 단계 CTA가 키보드 또는 내비게이션 영역 뒤에 남을 수 있습니다. 먼저 사용자가 전환 중에도 해야 하는 한 가지 행동을 정하고, 그 요소가 어느 위치에 남아야 하는지를 기준으로 잡으세요.
화면 요소 | 키보드가 열릴 때 확인할 질문 | 완료로 착각하기 쉬운 신호 |
|---|---|---|
입력 필드 | 현재 입력값과 포커스가 보이는가 | 포커스만 유지됨 |
주요 버튼 | 손가락으로 누를 수 있고 키보드와 겹치지 않는가 | 버튼이 화면 트리에 존재함 |
목록·본문 | 선택한 항목이나 오류 안내가 가려지지 않는가 | 화면 전체가 단순히 위로 이동함 |
완료 안내 | 제출 뒤 키보드·로딩·성공 상태의 순서를 설명하는가 | 네트워크 요청을 시작함 |
Android의 키보드 공식 안내는 `WindowInsetsCompat`으로 화면 키보드를 포함한 inset을 다룰 수 있다고 설명합니다. Compose를 쓰는 경우에는 IME 전환과 레이아웃 패스를 프레임에 맞춰 처리한다는 안내가 있어, 임의의 고정 높이 계산을 그대로 가져오기보다 사용 중인 UI 체계의 inset 처리 방식을 먼저 확인하는 편이 안전합니다.
1. 레이아웃 여백과 애니메이션 동기화는 다른 결정입니다
첫 결정은 키보드가 최종 위치에 도착했을 때의 안전한 배치입니다. Android Developers는 `adjustResize` 설정이 Activity가 IME inset을 받아 키보드의 표시·숨김에 맞춰 padding으로 레이아웃을 조절하도록 돕는다고 설명합니다. 이 설정이나 대응 inset 처리가 없으면, 화면의 하단 조작 요소가 보이지 않는 문제가 생길 수 있습니다.
두 번째 결정은 그 최종 위치로 이동하는 과정입니다. Views 기반 화면에서 사용자가 키보드가 움직이는 동안 입력창이나 보조 뷰도 같은 흐름으로 움직여야 한다면, 공식 문서는 Android 11(API 30) 이상과 AndroidX 호환 API에서 `WindowInsetsAnimationCompat`으로 동기화할 수 있다고 안내합니다. 즉 최종 위치가 맞는 것과 전환 중 튀지 않는 것은 별도 검수 항목입니다.
고정된 최종 배치가 먼저 필요한지 확인합니다.
전환 중 시각적 연속성이 사용자 과업에 중요한지 정합니다.
Compose인지 Views인지, 또는 둘을 섞는지 기록합니다.
이미 컴포넌트가 적용한 inset을 다시 적용해 이중 여백이 생기지 않는지 봅니다.
특히 “키보드 애니메이션을 직접 구현해야 한다”는 뜻으로 받아들이면 안 됩니다. 공식 문서는 Compose 개발자에게 별도 조치가 필요하지 않은 경우를 안내하며, Views에서도 기본 동기화 또는 호환 API의 적용 범위가 다릅니다. 현재 화면이 실제로 어떤 UI 체계를 쓰는지 확인한 뒤, 필요한 범위에서만 전환 처리를 설계하세요.
앱 MVP의 화면 흐름과 출시 전 QA 범위를 함께 정리해야 한다면, 유인어스에 MVP 범위 상담하기로 현재 핵심 화면을 공유해 보세요.
2. 키보드 높이 하나로 모든 하단 요소를 판단하지 않습니다
키보드가 보일 때 화면과 겹치는 영역은 기기, 창 모드, 시스템 바, 화면 구성에 따라 달라질 수 있습니다. Android Developers의 window insets 문서는 시스템 바, 디스플레이 컷아웃, 시스템 제스처, 키보드처럼 앱 창과 교차할 수 있는 영역을 각 inset 유형으로 설명합니다. 따라서 ‘키보드 높이’라는 단일 상수로 하단 padding을 정하기보다, 해당 화면에서 어떤 inset을 합치거나 분리할지 결정해야 합니다.
예를 들어 스크롤 가능한 목록 아래에 입력창이 있는 화면이라면 목록이 마지막 메시지나 오류 문구까지 스크롤될 수 있는지와 입력창이 눌릴 수 있는지를 따로 봐야 합니다. 상단 검색창만 있는 화면이라면 하단 버튼을 이동시키지 않아도 될 수 있습니다. 폼 화면에서는 현재 포커스 필드가 가려졌을 때만 해당 위치를 노출하는 방식이 더 자연스러울 수 있습니다.
같은 키보드 전환이라도 ‘모든 요소를 이동’하는 규칙보다, 현재 과업에서 가려지면 안 되는 요소를 명시하는 규칙이 검수와 수정에 더 유용합니다.
3. 제출 완료와 키보드 닫힘을 하나의 성공 신호로 묶지 않습니다
사용자가 전송을 눌렀다고 서버 저장, 화면 갱신, 키보드 닫힘이 동시에 끝나는 것은 아닙니다. 네트워크 요청이 진행되는 동안에는 중복 제출을 막을지, 입력을 유지할지, 오류가 나면 어느 필드에 초점을 되돌릴지 정해야 합니다. 성공 뒤에 키보드를 닫더라도, 목록 반영이나 다음 화면 이동이 실패하면 사용자는 완료 여부를 알기 어렵습니다.
사용자 동작: 입력과 제출 버튼 탭.
클라이언트 상태: 유효성 검사, 로딩, 중복 탭 방지.
서버 결과: 성공·검증 오류·재시도 가능 오류를 구분.
화면 결과: 성공 내용 반영 또는 오류 설명과 포커스 복귀.
키보드 결과: 유지·닫힘·다음 입력으로 이동 중 무엇인지 표시.
이 순서는 Android 문서의 API 동작을 제품 흐름에 맞춰 해석한 운영 제안입니다. 앱마다 저장 결과와 다음 과업이 다르므로, 키보드가 닫혔다는 관찰만으로 결제·가입·문의 전송 같은 비즈니스 완료를 선언해서는 안 됩니다. 입력 상태와 완료 상태를 분리하는 관점은 앱 MVP 폼 오류 안내 기준에서도 이어서 확인할 수 있습니다.
4. Views와 Compose를 섞는 화면은 inset의 전달 경계를 먼저 확인합니다
새 Compose 화면 안에 기존 View가 있거나 반대인 경우, 한쪽에서 소비한 inset이 다른 쪽에 어떻게 전달되는지 확인해야 합니다. Android Developers는 Views와 Compose를 함께 쓸 때 sibling View에 inset이 전달되는지 확인해야 하는 이전 Android 버전의 경우도 안내합니다. 이 경계를 확인하지 않으면 특정 기기에서만 입력창이 두 번 이동하거나 전혀 이동하지 않는 현상이 나타날 수 있습니다.
코드를 보기 전에도 QA 시나리오를 분리할 수 있습니다. 동일 화면에서 키보드를 열고 닫는 동작, 다른 필드로 이동하는 동작, 오류 후 다시 입력하는 동작, 앱을 백그라운드로 보냈다 돌아오는 동작을 각각 기록하세요. 이 기록은 ‘기기에서 한 번 잘 됐다’는 인상보다 수정 범위를 좁히는 데 도움이 됩니다.
화면 진입 → 필드 포커스 → 키보드 표시
→ CTA/오류 문구 가시성 확인 → 제출 또는 취소
→ 성공·오류 상태 확인 → 키보드/포커스 최종 상태 확인5. 출시 전에는 기기별 결과 대신 재현 가능한 과업을 남깁니다
키보드 전환 문제는 화면 크기, 내비게이션 방식, 글자 크기, 분할 창, 키보드 종류와 사용자 흐름에 따라 다르게 보일 수 있습니다. 모든 조합을 보장한다는 식의 체크리스트는 현실적이지 않습니다. 대신 MVP에서 실제로 지원하는 OS·기기·창 상태를 명시하고, 각 핵심 과업이 가려지지 않았다는 관찰을 남기세요.
짧은 QA 기록 템플릿
대상 화면과 핵심 과업: 예) 문의 내용 입력 후 전송.
테스트 환경: 앱 버전, Android 버전, 화면 방향, 창 상태.
전환 시점: 포커스·키보드 열림·필드 변경·키보드 닫힘.
가시성: 입력값, 오류 문구, CTA가 실제로 눌렸는가.
완료 상태: 로딩·성공·실패와 키보드·포커스의 최종 상태.
후속 조치: 재현 조건, 담당 영역, 다시 확인할 빌드.
정적 시스템 바 처리와 동적 키보드 전환을 한 번에 끝냈다고 보지 마세요. Android 15 이상에서 target SDK 35를 쓰는 경우 엣지투엣지가 기본 강제된다는 공식 안내도 있으므로, 화면 전체의 안전한 배치와 IME 전환 검수를 같은 릴리스 점검 안에서 서로 다른 항목으로 남기는 편이 좋습니다.
자주 묻는 질문
Android 키보드가 올라올 때 `adjustResize`만 설정하면 충분한가요?
항상 그렇다고 단정할 수 없습니다. 공식 문서에서 `adjustResize`는 IME inset을 받아 레이아웃을 조절하는 한 방법으로 안내됩니다. 실제 화면에서는 사용하는 UI 체계, 이미 적용된 inset, 핵심 CTA와 스크롤 영역이 겹치지 않는지까지 확인해야 합니다.
Compose 화면도 키보드 애니메이션 콜백을 직접 만들어야 하나요?
공식 키보드 안내는 Compose가 키보드 애니메이션과 레이아웃 패스를 처리한다고 설명합니다. 다만 앱의 구성과 커스텀 동작에 따라 검수할 요소는 남으므로, 직접 콜백 구현 여부와 사용자 과업의 가시성 검수는 구분하세요.
키보드가 닫히면 제출이 성공한 것으로 처리해도 되나요?
아닙니다. 키보드 상태는 화면 입력 상태일 뿐 서버 저장이나 다음 화면 반영을 증명하지 않습니다. 제출 결과, 오류 안내, 중복 요청 방지, 키보드·포커스의 최종 상태를 별도로 확인해야 합니다.
이 기준은 모든 Android 기기에서 동일하게 동작함을 보장하나요?
보장하지 않습니다. 지원 범위 안에서 실제 과업을 재현해 확인하기 위한 점검 기준입니다. 기기, 창 모드, 화면 구성과 사용 중인 라이브러리에 따라 결과가 달라질 수 있습니다.
키보드 전환까지 포함한 핵심 사용자 흐름을 MVP 요구사항과 QA 항목으로 정리하고 싶다면, 유인어스에 MVP 개발 상담하기로 문의해 보세요.