2016-07-14 94 views
0

我还没有在使用nativescript访问原生Platform的东西时遇到的问题。下面是一个简单的片段在那里我试图访问一个本地GUI元素,并将其添加到页面:NativeScript:访问原生Android API

var PagesModule = require('ui/page'); 
 
var Application = require('application'); 
 
var StackLayout = require('ui/layouts/stack-layout').StackLayout; 
 

 
exports.createPage = function createPage(args) { 
 
\t var page = new PagesModule.Page; 
 
\t page.actionBarHidden = true; 
 
\t page.backgroundColor = '#F5F5F5'; 
 
\t page.backgroundSpanUnderStatusBar = false; 
 
\t var textView = new android.widget.TextView(Application.android.currentContext); 
 
\t var stackLayout = new StackLayout(); 
 
\t stackLayout.addChild(textView); 
 
\t page.content = stackLayout; 
 
    return page; 
 
}

我觉得我缺少的是如何nativescript相互作用的理解的东西与本地平台。

+0

你在创造新的'TextView'看起来不错的代码。你有什么具体的不工作或只是想更好地理解它吗? –

+0

它不起作用:TypeError:view._inheritProperties不是函数 –

+2

要添加android本机小部件,您可以使用NativeScript占位符。你可以找到一个例子,如何在NativeScript文档中使用它 - https://docs.nativescript.org/ui/placeholder#placeholder –

回答

0

它失败的原因是因为只有“查看”或“查看”后裔可以被分配到“视图”儿童或儿童。

您正在创建一个直接的android组件;但它不是NS框架的一部分,所以框架不知道如何处理它。当你创建一个可视化组件时,你可以从一个视图(或另一个视图后裔)中下载你的组件。代码的NS版本应该是:

var PagesModule = require('ui/page'); 
var Application = require('application'); 
var StackLayout = require('ui/layouts/stack-layout').StackLayout; 
vat TextView = require('ui/text-view').TextView; 

exports.createPage = function createPage(args) { 
    var page = new PagesModule.Page; 
    page.actionBarHidden = true; 
    page.backgroundColor = '#F5F5F5'; 
    page.backgroundSpanUnderStatusBar = false; 
    var textView = new TextView(); 
    var stackLayout = new StackLayout(); 
    stackLayout.addChild(textView); 
    page.content = stackLayout; 
    return page; 
} 

如果你实际上是想创建自己的组件,我建议你看看UI /开关它可能是最简单的例子;但简而言之,你需要继承的观点,在Android上使用功能_createUI实际创建本机组件,因此,在简单的话来说那就是:

var View = require('ui/core/view').View; 

function MyTextView() { 
    View.apply(this, arguments); 
} 
__extends(MyTextView, View); 
Object.defineProperty(MyTextView.prototype, "android", { 
    get: function() { 
     return this._android; 
    }, 
    enumerable: true, 
    configurable: true 
}); 
MyTextView.prototype._createUI = function() { 
    this._android = new android.widget.TextView(Application.android.currentContext); 
}; 

然后你可以使用new MyTextView(),而不是内置的new TextView()函数在第一个代码示例中。

请与此组件注意,因为我们还没有定义任何附加的辅助功能,设置和获取文本,你将不得不做的事情一样

var x = page.GetViewById('myTextId').android.setText("Some Value"); 

和访问本地底层控制和android属性。

请注意我在http://fluentreports.com/blog/?p=167对一些这方面的整体博客文章(而关于NS网站上的许多其他文章)