mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
* enable recycling of nativeView * backgroundInternal is reset if setting new value leads to background.isEmpty() == true. * android background.getDefault always return copy of the background. Now all controls that mutate the background can be reset to initial state (e.g. Button & ActionBar) passing resources to copied background so it respect density. fix properties initNativeView * reset padding when backgroundInternal is reset. * Fix text reset Fix padding reset * fix tsc errors * fix ugly text rendering. * Add unit tests for recycling native views Fix several issues that came from the above tests Fix maxLength property missing a converter callback Remove old files * Remove old files * Revert backgroundInternal setter * change the order of tests so that appium can work again * Remove suggestion on every TextView & TextField init (strangely it is enabled after view is recycled....) * Fix function to get parent layout if specified * Button stateListAnimator restored when button is recycled zIndex defaultValue is now undefined instead of NaN * revert zIndex.setNative to always clear stateListAnimator because it was breaking one UI test (setting value=0 was returning the previous stateListAnimator) * fix search-bar backgound-color recycling * Fix alignments setters * Fix imageView recycling Fix button recycling Fix edit-text recycling resetNativeView is called only if recycleNativeView flag is true * Fix incorrect merge * Fix text-view & text-field textTransform * Fix EditText text reset * Fix runtime crash on ARM emulator API 21 * Fix text-base minHeight. maxHeight reset Fix reset of isUserInteractionEnabled
95 lines
2.9 KiB
TypeScript
95 lines
2.9 KiB
TypeScript
import { ContentView as ContentViewDefinition } from ".";
|
|
import { View, CustomLayoutView, AddChildFromBuilder, layout } from "../core/view";
|
|
|
|
export * from "../core/view";
|
|
|
|
export class ContentView extends CustomLayoutView implements ContentViewDefinition, AddChildFromBuilder {
|
|
private _content: View;
|
|
|
|
get content(): View {
|
|
return this._content;
|
|
}
|
|
set content(value: View) {
|
|
let 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 {
|
|
let result: 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, newView: View) {
|
|
//
|
|
}
|
|
|
|
public _addChildFromBuilder(name: string, value: any) {
|
|
if (value instanceof View) {
|
|
this.content = value;
|
|
}
|
|
}
|
|
|
|
public eachChildView(callback: (child: View) => boolean) {
|
|
const content = this._content;
|
|
if (content) {
|
|
callback(content);
|
|
}
|
|
}
|
|
|
|
// This method won't be called in Android because we use the native android layout.
|
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
|
|
const result = View.measureChild(this, this.layoutView, widthMeasureSpec, heightMeasureSpec);
|
|
|
|
const width = layout.getMeasureSpecSize(widthMeasureSpec);
|
|
const widthMode = layout.getMeasureSpecMode(widthMeasureSpec);
|
|
|
|
const height = layout.getMeasureSpecSize(heightMeasureSpec);
|
|
const heightMode = layout.getMeasureSpecMode(heightMeasureSpec);
|
|
|
|
const measureWidth = Math.max(result.measuredWidth, this.effectiveMinWidth);
|
|
const measureHeight = Math.max(result.measuredHeight, this.effectiveMinHeight);
|
|
|
|
const widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0);
|
|
const heightAndState = 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.layoutChild(this, this.layoutView, 0, 0, right - left, bottom - top);
|
|
}
|
|
}
|
|
|
|
ContentView.prototype.recycleNativeView = true; |