Клавиатура на Surface Duo

Если приложение отображается на одном экране, оно ведет себя аналогично приложениям на любом другом устройстве Android — клавиатура отображается в рамках окна приложения, а разработчики могут прослушивать изменения вставок окна для корректировки макета со смещением клавиатуры (чтобы редактируемый текст не скрывался):

Keyboard overlaying app on a single screen

Если Surface Duo работает в режиме альбомной ориентации на двух экранах, клавиатура может отображаться на всем нижнем экране. При этом позиция приложения будет зависеть от того, как оно отображалось до редактирования:

  • Развернуто — если приложение развернуто на оба экрана, клавиатура займет нижнюю половину приложения (с соответствующим изменением вставок).
  • Приложение на верхнем экране — нижняя вставка будет нулевой, так как клавиатура будет полностью занимать другой экран.
  • Приложение на нижнем экране — приложение будет перемещено на верхний экран для корректного отображения клавиатуры. После завершения редактирования и скрытия клавиатуры приложение будет возвращено на нижний экран.

Keyboard in laptop mode, uses entire bottom screen

Приложениям не нужно выполнять другие действия в таких ситуациях, а просто реагировать на изменения вставок и соответствующим образом корректировать макет.

Вставки клавиатуры

Чтобы обнаружить вставку клавиатуры, сначала добавьте android:windowSoftInputMode в манифест Android:

android:windowSoftInputMode="stateAlwaysHidden|adjustResize"

Затем задайте прослушиватель с помощью метода setOnApplyWindowInsetsListener в корневом представлении действия. Android будет вызывать прослушиватель всякий раз при отображении клавиатуры, а systemWindowInsets.bottom будет включать данные о числе пикселей, занимаемых клавиатурой (в том числе при незакрепленной клавиатуре):

Floating keyboard has different inset values

Примеры