#android #qt #qml #qtquickcontrols2
Вопрос:
У меня есть Dialog
элемент, содержащий верхний, нижний колонтитулы и содержимое, которое является ListView
:
Dialog {
width: 200
height: 200
x: 10
y: 100
header: Rectangle {
}
contentItem: ListView {
delegate: TextField {
// this is covered by the Android keyboard
}
}
footer: Rectangle {
}
}
В iOS весь экран смещен вверх, так что вид списка TextField
(https://doc.qt.io/qt-5/qml-qtquick-controls2-textfield.html) владение текстовым курсором всегда видно. На Android TextField
курсор находится под клавиатурой Android. Я уже пытался установить android:windowSoftInputMode="adjustResize"
, AndroidManifest.xml
но безуспешно.
Есть ли простой способ убедиться, что TextField
курсор, которым в данный момент владеет курсор, всегда виден? Или единственным решением является ручное перемещение координаты y диалогового окна?
Скрытие курсора с клавиатуры Qml:
Обычное текстовое поле Android:
Обычное текстовое поле Android сдвигается вверх, когда клавиатура открыта:
С уважением,
Ответ №1:
Весь текстовый вид? Нет, клавиатуры в Android работают не так. Единственный рычаг, который у вас есть, — это режим softinput, который либо перемещает, либо изменяет размер. В режиме панорамирования экран прокручивается вверх таким образом, чтобы курсор всегда был виден (но остальная часть текста может отсутствовать). В режиме изменения размера приложение изменяется в пространстве над клавиатурой, а затем, при необходимости, смещается, чтобы курсор был виден. Иногда это может сделать большую часть экрана видимой, если у вас на экране было пустое пространство и ваш макет настроен на хорошее масштабирование (экраны входа в систему часто выигрывают). Но нет никакого способа гарантировать, что весь текст или любое другое поле по-прежнему отображается на экране. Это просто не так, как работает Android.
Комментарии:
1. Достаточно, чтобы курсор был виден (т. е. не закрывался клавиатурой). Но я не могу заставить это работать с Qml
TextField
.2. Что же ты тогда видишь? Экран вообще не движется? Это было бы похоже на режим «adjustNone», который действительно существует, хотя его использование очень редко. Его стоит проверить, чтобы убедиться во время выполнения, что softInputMode является тем, чем он должен быть. Но ты ничего не можешь сделать, кроме этого. Нет даже способа узнать, когда клавиатура запускается и надежно отключается.
3. Я добавил несколько скриншотов, показывающих: Qml с закрытой клавиатурой, Qml с клавиатурой, покрывающей текстовое поле, по сравнению с обычным управлением Android, которое правильно перемещает поле, чтобы оно оставалось видимым.