Quick answer: Godot 4 LineEdit obscured by Android's virtual keyboard? The viewport doesn't auto-scroll - listen for OS.has_virtual_keyboard and shift the UI manually.

Login screen on Android: when the keyboard opens, the password field is hidden behind it.

Shift the form

var kb_height = DisplayServer.virtual_keyboard_get_height()
form.position.y = -kb_height

Set in _process while editing. virtual_keyboard_get_height returns 0 when hidden; non-zero when shown.

Use the keyboard signal

Connect to OS.virtual_keyboard_changed instead of polling. Fires on show/hide with the current height, less wasteful than per-frame check.

Avoid stretch mode 'canvas_items'

With this stretch mode the keyboard reports height in pixels, not stretched units. Convert via the viewport scale or your layout math is off.

“Virtual keyboards on mobile are an OS concern your UI has to opt into handling.”

Test on both iOS and Android. iOS keyboards push the viewport automatically in some browsers; Android leaves it to you. Don't assume parity.