2016-07-14 93 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網站上的許多其他文章)