当页面在带有nativescript的android应用程序中加载时如何显示键盘?

Posted

技术标签:

【中文标题】当页面在带有nativescript的android应用程序中加载时如何显示键盘?【英文标题】:How to show keyboard when page loads in android app with nativescript? 【发布时间】:2018-02-09 18:57:57 【问题描述】:

我的 android 应用程序的第一页有一个输入字段。所以我想要的是当这个页面加载时我想自动显示键盘而不点击输入字段。

【问题讨论】:

投反对票,因为在发布之前明显缺乏对此事的研究。在页面的 onNavigatedTo 中,您可以通过 id 获取输入视图,并将其聚焦,这应该反过来打开键盘。 我试过它在android中不起作用。 【参考方案1】:

pkanev 的评论在 ios 上是真的;即,只需专注于文本字段,ios就会打开键盘。

但在 Android 上你需要做一些额外的工作 --

var utils = require("tns-core-modules/utils/utils");

var myTextfield = page.getViewById("myTextFieldId");

if (myTextfield.ios) 
    console.log("myTextfield.ios");

    // on ios this will open the keyboard but not on android
    myTextfield.focus();


if (myTextfield.android) 
    console.log("myTextfield.android");

    setTimeout(function() 

        // places the cursor here but doesn't open the keyboard
        myTextfield.android.requestFocus();

        var imm = utils.ad.getInputMethodManager();

        imm.showSoftInput(myTextfield.android, 0);

    , 300);

请注意 setTimeout 的使用,这也是您在原生 Android 中需要执行的操作。

【讨论】:

【参考方案2】:

使用 NativeScript 和 Angular 在 Android 中聚焦字段并触发键盘:

    为模板中的元素命名:<TextField #myInput [...]></TextField>

    在你的组件文件中使用它:

    import  ElementRef, OnInit  from "@angular/core";
    
    [...]
    
    export class MyComponent implements OnInit 
      @ViewChild("myInput") myInput: ElementRef;
    
      [...]
    
      ngOnInit() 
        setTimeout(() => this.myInput.nativeElement.focus(), 0);
      
    
    

【讨论】:

对我来说,它只适用于非零超时(例如 100 毫秒)。

以上是关于当页面在带有nativescript的android应用程序中加载时如何显示键盘?的主要内容,如果未能解决你的问题,请参考以下文章

tns 预览不适用于带有 nativescript-vue 的 android

如何在 NativeScript 应用程序中导航多个页面?

NativeScript Vue ListView onTap 不发送带有事件的项目

带有 nativeScript 的 Mapbox

带有 NativeScript 的 web3

带有 Googlemap 静态 api 的 Nativescript - iOS 上的问题