我正在尝试使用自定义布局视图创建对话框,当我尝试这样做时:
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视图?
答案 0 :(得分:1)
如果不将其添加到Visual UI树中,则无法访问nativescript视图的android
或android
属性。将nativescript视图添加到UI树后,它将获得nativeView
和let 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的nativeView
和layout.android
属性的值。
,但是之后,您将无法使用layout.nativeView
中的setView
或let nativeView=layout.nativeView;
container.nativeView().removeView(nativeView)
dialog.setView(nativeView).show();
,因为它已经包含了父对象。因此,您需要从容器的本机视图中删除该视图。
nativeView
还请注意,从容器中删除子代也会将子代的android属性重置为null。这就是为什么我们要保存对{{1}}变量的引用。
这是正在运行的游乐场演示,您需要帮助吗?https://play.nativescript.org/?template=play-ng&id=4610ET