我仍然无法使用nativescript访问本机平台的东西。这是一个简单的代码片段,我尝试访问本机gui元素并将其添加到页面中:
var PagesModule = require('ui/page');
var Application = require('application');
var StackLayout = require('ui/layouts/stack-layout').StackLayout;
exports.createPage = function createPage(args) {
var page = new PagesModule.Page;
page.actionBarHidden = true;
page.backgroundColor = '#F5F5F5';
page.backgroundSpanUnderStatusBar = false;
var textView = new android.widget.TextView(Application.android.currentContext);
var stackLayout = new StackLayout();
stackLayout.addChild(textView);
page.content = stackLayout;
return page;
}
我认为我在理解nativescript如何与原生平台交互时缺少一些东西。
答案 0 :(得分: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 / Switch它可能是最简单的例子;但简而言之,您需要对视图进行子类化,在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的网站上的许多其他文章)上有一篇关于其中一些内容的完整博客文章