NativeScript-如何将xml布局转换为本机视图?

时间:2018-06-19 20:20:51

标签: view nativescript

我正在尝试使用自定义布局视图创建对话框,当我尝试这样做时:

import app = require('application'); 
import { GridLayout } from 'ui/layouts/grid-layout';

const dialog = new android.app.AlertDialog.Builder(app.android.currentContext);
const layout = new GridLayout();

dialog.setView(layout);

所以我遇到了以下错误:

Uncaught Error: Cannot convert object to Landroid/view/View;

我尝试更改为:

dialog.setView(layout.android);

dialog.setView(layout.nativeView);

该对话框显示为空。

如何将NativeScript UI对象转换为本地android视图?

1 个答案:

答案 0 :(得分:1)

如果不将其添加到Visual UI树中,则无法访问nativescript视图的androidandroid属性。将nativescript视图添加到UI树后,它将获得nativeViewlet container= <StackLayout>this.page.getViewById("stackContainer"); let layout = new GridLayout(); let label = new Label(); label.text = "Custom Alert working"; layout.addChild(label) container.addChild(layout) 的有效值。

所以您必须执行以下操作:

android

现在您将拥有GridLayout的nativeViewlayout.android属性的值。

,但是之后,您将无法使用layout.nativeView中的setViewlet nativeView=layout.nativeView; container.nativeView().removeView(nativeView) dialog.setView(nativeView).show(); ,因为它已经包含了父对象。因此,您需要从容器的本机视图中删除该视图。

nativeView

还请注意,从容器中删除子代也会将子代的android属性重置为null。这就是为什么我们要保存对{{1}}变量的引用。

这是正在运行的游乐场演示,您需要帮助吗?https://play.nativescript.org/?template=play-ng&id=4610ET