2016-04-28 9 views
1

Ich arbeite an einem nativescript-Plugin für eine Material-inspirierte Dropdown-Liste von Arten. Das Plug-in fügt der Seite ein AbsoluteLayout als Hintergrund hinzu und fügt dann dem AbsoluteLayout eine ListView hinzu, so dass der Picker oben angezeigt wird. Es fügt auch ein GridView mit Label hinzu und wird so in die Position gebracht, die durch sein XML definiert ist. Hier ist ein Beispiel für das Plugin in Verwendung in einer XML-Ansicht:Overlay-Positionierung in NativeScript

<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> 

Was ich will das Listview direkt über das MaterialDropdownList Element zu tun ist, angezeigt wird, wenn es angezapft wird. Wie auch immer, ich habe versucht, durch den UrsprungX und HerkunftY, den ganzen Weg nach oben durch jedes Elternelement, bis ich die Seite traf, und ich bekomme eine super niedrige Anzahl von "2". Hier ein Schnipsel:

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; 

Alle Gedanken sehr geschätzt!

Antwort

4

Ich glaube, die Funktion, die Sie suchen, ist element.getLocationOnScreen() oder element.getLocationInWindow(), um die tatsächliche Position des Elements zu erhalten.

+0

Das hat sehr gut funktioniert! Vielen Dank! –