После спотыкания о других дискуссиях и ресурсах:
Из этих ресурсов было сделано несколько выводов, которые я рассмотрю ниже.
Поток шаблонов
Во-первых, вам нужно убедиться, что макет вашей страницы отражает что-то вроде следующего:
ScrollView
> StackLayout
> GridLayout
> SomeElement
> GridLayout
> TextField
Режим программного ввода Android
Это относится к экранной клавиатуре, которая отображается, когдатекстовое поле в пользовательском интерфейсе получает фокус.Один из способов убедиться, что клавиатура не перекрывает текстовое поле, - убедиться, что в вашем AndroidManifest.xml
установлено свойство windowSoftInputMode
.Вы можете использовать adjustResize
или adjustPan
.Я не совсем уверен в различиях, но некоторые пользователи сообщали о том, что они работают, или оба работают, поэтому вам, возможно, придется поэкспериментировать с тем, что подходит для вашего случая.Вы можете прочитать больше об этих двух флагах здесь .
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="__PACKAGE__"
android:versionCode="10000"
android:versionName="1.0">
...
<application
...
android:windowSoftInputMode="stateHidden | adjustPan">
Обновление 2
Я полагаю, что в NativeScript происходит сброс, который вызывает флагустанавливается android:windowSoftInputMode
для сброса, когда приложение suspended
и resumed
.Чтобы обойти это, вам нужно внести некоторые изменения в контроллере самого представления, чтобы смотреть , чтобы эти события происходили в жизненном цикле вашего приложения, а затем задним числом снова включить флаги.
some-view.component.ts (TypeScript)
import { Component, OnInit } from '@angular/core';
import * as app from "application";
import {
resumeEvent,
suspendEvent,
ApplicationEventData,
on as applicationOn,
run as applicationRun } from "tns-core-modules/application";
declare var android: any; // <- important! avoids namespace issues
@Component({
moduleId: module.id,
selector: 'some-view',
templateUrl: './some-view.component.html',
styleUrls: ['./some-view.component.css']
})
export class SomeViewComponent implements OnInit {
constructor() {
applicationOn(suspendEvent, (args: ApplicationEventData) => {
// args.android is an android activity
if (args.android) {
console.log("SUSPEND Activity: " + args.android);
}
});
applicationOn(resumeEvent, (args: ApplicationEventData) => {
if (args.android) {
console.log("RESUME Activity: " + args.android);
let window = app.android.startActivity.getWindow();
window.setSoftInputMode(
android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
);
// This can be SOFT_INPUT_ADJUST_PAN
// Or SOFT_INPUT_ADJUST_RESIZE
}
});
}
}