如何在NativeScript页面中添加绝对元素

时间:2016-06-14 15:50:07

标签: layout plugins nativescript

我希望能够通过代码将View组件(插件)放入页面并让它显示在页面上的某个X \ Y上...但我有点难过。

任何通过page.content添加的尝试都会将其添加到layout \ render pass中,以便占用空间。

所以这会被注入"任何"页面在"任何"时间,我无法控制标记,这将用于(知道我的意思吗?)没有XML,不幸的是,答案不能只是将所有内容都包装在AbsoluteLayout中,因为一个人不能强制要求用户应用\布局。

思考,甚至​​可能吗?

2 个答案:

答案 0 :(得分:5)

基本上,最简单的方法是动态地完全跨平台兼容,就是在JavaScript代码中创建一个AbsoluteLayout项,并将项和AL动态插入到页面容器中。

代码将是这样的:

var AbsoluteLayout = require('ui/layouts/absolute-layout').AbsoluteLayout;
var myAL = new AbsoluteLayout();
var myItem  new myPluginItem();

// Set you left, right, top, bottom coords.
myItem.top = x;

// Add our item to the AbsoluteItem
myAL.addChild(myItem);

var frame = require('ui/frame');
var page = frame.topmost().currentPage;
var LayoutBase = require('ui/layouts/layout-base').LayoutBase;

page._eachChildView(function(view) {
  if (view instanceof LayoutBase) {
     view.addChild(myItem); 
     return false;
  } 
  return true;
});

然而,如果你不想这么做,那就是非常简单的方法;唯一的另一种方法是实际上降低一点。您可以原生访问iOS视图控制器(page._ios.view)和android视图(page._nativeView),然后使用addView(https://developer.android.com/reference/android/view/ViewManager.html)或addSubview({{}等手动将其添加到视图中。 3}})。

答案 1 :(得分:4)

我想补充一下,您可以通过导入AbsoluteLayout来设置TypeScript中的Top和Left属性

import {AbsoluteLayout} from 'ui/layouts/absolute-layout';

然后使用公开的函数setLeft或setTop

AbsoluteLayout.setLeft(YourItem, LeftValue); 要么 AbsoluteLayout.setTop(YourItem, TopValue);