在浏览了其他讨论和资源之后,以下是一些需要注意的事项:
这些资源中有一些要点,我将在下面进行回顾。
模板流程
首先,你需要确保你的页面布局与以下类似:
ScrollView
> StackLayout
> GridLayout
> SomeElement
> GridLayout
> TextField
Android软键盘输入模式
这与UI中的文本字段获得焦点时显示的屏幕键盘有关。确保键盘不会覆盖您的文本字段的一个技巧是在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
设置的标志在应用程序挂起
和恢复
时被重置。为了解决这个问题,您需要在视图控制器中进行一些调整,以监视这些事件在您的应用程序生命周期中发生,并反过来重新启用这些标志。
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;
@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) => {
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
);
}
});
}
}