mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 03:31:45 +08:00
92 lines
2.9 KiB
TypeScript
92 lines
2.9 KiB
TypeScript
import definition = require("ui/content-view");
|
|
import view = require("ui/core/view");
|
|
import * as utils from "utils/utils";
|
|
|
|
export class ContentView extends view.CustomLayoutView implements definition.ContentView, view.AddChildFromBuilder {
|
|
private _content: view.View;
|
|
|
|
get content(): view.View {
|
|
return this._content;
|
|
}
|
|
set content(value: view.View) {
|
|
var oldView = this._content;
|
|
if (this._content) {
|
|
this._removeView(this._content);
|
|
}
|
|
|
|
this._content = value;
|
|
|
|
if (this._content) {
|
|
this._addView(this._content);
|
|
}
|
|
|
|
this._onContentChanged(oldView, value);
|
|
}
|
|
|
|
get layoutView(): view.View {
|
|
var result: view.View;
|
|
|
|
if (this._content) {
|
|
let first = true;
|
|
this._content._eachLayoutView((child) => {
|
|
if (first) {
|
|
first = false;
|
|
result = child;
|
|
} else {
|
|
throw new Error("More than one layout child inside a ContentView");
|
|
}
|
|
});
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
get _childrenCount(): number {
|
|
if (this._content) {
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
public _onContentChanged(oldView: view.View, newView: view.View) {
|
|
//
|
|
}
|
|
|
|
public _addChildFromBuilder(name: string, value: any) {
|
|
if (value instanceof view.View) {
|
|
this.content = value;
|
|
}
|
|
}
|
|
|
|
public _eachChildView(callback: (child: view.View) => boolean) {
|
|
if (this._content) {
|
|
callback(this._content);
|
|
}
|
|
}
|
|
|
|
// This method won't be called in Android because we use the native android layout.
|
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
|
var result = view.View.measureChild(this, this.layoutView, widthMeasureSpec, heightMeasureSpec);
|
|
|
|
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
|
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
|
|
|
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
|
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
|
|
|
var density = utils.layout.getDisplayDensity();
|
|
var measureWidth = Math.max(result.measuredWidth, this.minWidth * density);
|
|
var measureHeight = Math.max(result.measuredHeight, this.minHeight * density);
|
|
|
|
var widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0);
|
|
var heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0);
|
|
|
|
this.setMeasuredDimension(widthAndState, heightAndState);
|
|
}
|
|
|
|
// This method won't be called in Android because we use the native android layout.
|
|
public onLayout(left: number, top: number, right: number, bottom: number): void {
|
|
view.View.layoutChild(this, this.layoutView, 0, 0, right - left, bottom - top);
|
|
}
|
|
} |