NativeScript 中的叠加定位
Overlay positioning in NativeScript
我正在为受 material 启发的各种下拉列表开发一个 nativescript 插件。该插件向页面添加一个 AbsoluteLayout 作为背景,然后向该 AbsoluteLayout 添加一个 ListView,以便选择器显示在顶部。它还添加了一个带有标签的 GridView,这样就可以将其放置在其 XML 定义的位置。这是在视图的 XML:
中使用的插件示例
<GridLayout rows="auto" columns="*, auto">
<StackLayout>
<label text="Color" />
<label style="height: 3; background-color: gray;" />
</StackLayout>
<MDL:MaterialDropdownList col="1" id="ddlColors"
items="{{ colors }}" selectedIndex="{{ selectedColorIndex }}" >
</MDL:MaterialDropdownList>
</GridLayout>
我想要做的是在点击 MaterialDropdownList
元素时直接在其上方显示 ListView。但是,我已经尝试通过 originX 和 originY,一直向上通过每个父元素,直到我点击页面,然后我得到了一个极低的“2”。这是一个片段:
let src: viewModule.View = <viewModule.View>arg.object,
x: number, y: number;
x = src.originX;
y = src.originY;
let parent = src.parent;
while (parent !== this.page) {
x += parent.originX;
y += parent.originY;
parent = parent.parent;
}
console.log(`x and y are ${x} and ${y}`); //2, 2
this._listPicker.originX = x;
this._listPicker.originY = y;
非常感谢任何想法!
我相信您正在寻找的功能是 element.getLocationOnScreen()
或 element.getLocationInWindow() 获取元素的实际位置。
我正在为受 material 启发的各种下拉列表开发一个 nativescript 插件。该插件向页面添加一个 AbsoluteLayout 作为背景,然后向该 AbsoluteLayout 添加一个 ListView,以便选择器显示在顶部。它还添加了一个带有标签的 GridView,这样就可以将其放置在其 XML 定义的位置。这是在视图的 XML:
中使用的插件示例<GridLayout rows="auto" columns="*, auto">
<StackLayout>
<label text="Color" />
<label style="height: 3; background-color: gray;" />
</StackLayout>
<MDL:MaterialDropdownList col="1" id="ddlColors"
items="{{ colors }}" selectedIndex="{{ selectedColorIndex }}" >
</MDL:MaterialDropdownList>
</GridLayout>
我想要做的是在点击 MaterialDropdownList
元素时直接在其上方显示 ListView。但是,我已经尝试通过 originX 和 originY,一直向上通过每个父元素,直到我点击页面,然后我得到了一个极低的“2”。这是一个片段:
let src: viewModule.View = <viewModule.View>arg.object,
x: number, y: number;
x = src.originX;
y = src.originY;
let parent = src.parent;
while (parent !== this.page) {
x += parent.originX;
y += parent.originY;
parent = parent.parent;
}
console.log(`x and y are ${x} and ${y}`); //2, 2
this._listPicker.originX = x;
this._listPicker.originY = y;
非常感谢任何想法!
我相信您正在寻找的功能是 element.getLocationOnScreen() 或 element.getLocationInWindow() 获取元素的实际位置。