Как добавить абсолютный элемент на страницу NativeScript

Я хочу иметь возможность просто поместить компонент View (плагин) на страницу через код и показать его на каком-то X\Y на странице... но я немного в тупике.

Любая попытка добавить через page.content как бы добавляет его в проход макета\рендеринга, поэтому он занимает место.

Таким образом, это будет внедрено на «любую» страницу в «любое» время, я не могу контролировать разметку, в которой это будет использоваться (понимаете, что я имею в виду?). Для нее нет XML, и, к сожалению, ответ не может быть просто оберните все в AbsoluteLayout, потому что это нельзя указать в пользовательских приложениях\макетах.

Мысли, даже возможно?


person Steve McNiven-Scott    schedule 14.06.2016    source источник


Ответы (2)


По сути, самый простой способ сделать это — обеспечить динамическую и полную кросс-платформенную совместимость — создать элемент AbsoluteLayout в коде JavaScript и динамически вставить элемент и 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(myAL); 
     return false;
  } 
  return true;
});

Однако, если вы не хотите делать это очень простым способом; единственный другой способ - фактически пойти немного ниже уровня. Вы можете изначально получить доступ к контроллеру представления iOS (page._ios.view) и представлению Android (page._nativeView), а затем вручную добавить его в представление, используя такие вещи, как addView (https://developer.android.com/reference/android/view/ViewManager.html) или addSubview (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/).

person Nathanael    schedule 14.06.2016

Я хотел бы добавить, что вы можете установить свойства Top и Left в TypeScript, импортировав AbsoluteLayout следующим образом

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

а затем с помощью открытых функций setLeft или setTop

AbsoluteLayout.setLeft(YourItem, LeftValue); or AbsoluteLayout.setTop(YourItem, TopValue);

person JoshSommer    schedule 15.06.2016