diff --git a/ui/image/image-common.ts b/ui/image/image-common.ts index 096a44617..98ae93c8a 100644 --- a/ui/image/image-common.ts +++ b/ui/image/image-common.ts @@ -13,6 +13,9 @@ var IMAGE = "Image"; var ISLOADING = "isLoading"; var STRETCH = "stretch"; +// on Android we explicitly set propertySettings to None because android will invalidate its layout (skip unnecessary native call). +var AffectsLayout = global.android ? dependencyObservable.PropertyMetadataSettings.None : dependencyObservable.PropertyMetadataSettings.AffectsLayout; + function onSrcPropertyChanged(data: dependencyObservable.PropertyChangeData) { var image = data.object; var value = data.newValue; @@ -58,7 +61,7 @@ export class Image extends view.View implements definition.Image { new proxy.PropertyMetadata(false, dependencyObservable.PropertyMetadataSettings.None)); public static stretchProperty = new dependencyObservable.Property(STRETCH, IMAGE, - new proxy.PropertyMetadata(enums.Stretch.aspectFit, dependencyObservable.PropertyMetadataSettings.AffectsLayout)); + new proxy.PropertyMetadata(enums.Stretch.aspectFit, AffectsLayout)); constructor(options?: definition.Options) { super(options); diff --git a/ui/layouts/layout-base.ts b/ui/layouts/layout-base.ts index 66b29d44b..47c0587be 100644 --- a/ui/layouts/layout-base.ts +++ b/ui/layouts/layout-base.ts @@ -5,7 +5,7 @@ import proxy = require("ui/core/proxy"); export class LayoutBase extends view.CustomLayoutView implements definition.LayoutBase, view.AddChildFromBuilder { - public static clipToBoundsProperty = new dependencyObservable.Property("clipToBounds", "LayoutBase", + public static clipToBoundsProperty = new dependencyObservable.Property("clipToBounds", "LayoutBase", new proxy.PropertyMetadata(true, dependencyObservable.PropertyMetadataSettings.None, LayoutBase.onClipToBoundsPropertyChanged)); private _subViews: Array = new Array(); @@ -71,7 +71,7 @@ export class LayoutBase extends view.CustomLayoutView implements definition.Layo get padding(): string { return this.style.padding; - } + } set padding(value: string) { this.style.padding = value; } @@ -105,9 +105,20 @@ export class LayoutBase extends view.CustomLayoutView implements definition.Layo } protected onClipToBoundsChanged(oldValue: boolean, newValue: boolean) { - // + var nativeView = this._nativeView; + if (!nativeView) { + return; } + if (nativeView instanceof UIView) { + nativeView.clipsToBounds = newValue; + } + + else if (nativeView instanceof android.view.ViewGroup) { + nativeView.setClipChildren(newValue); + } + } + private static onClipToBoundsPropertyChanged(data: dependencyObservable.PropertyChangeData): void { var layout = data.object; layout.onClipToBoundsChanged(data.oldValue, data.newValue); diff --git a/ui/layouts/layout.ios.ts b/ui/layouts/layout.ios.ts index 618c4597c..34fc13a29 100644 --- a/ui/layouts/layout.ios.ts +++ b/ui/layouts/layout.ios.ts @@ -32,10 +32,4 @@ export class Layout extends layoutBase.LayoutBase implements definition.Layout { var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec); trace.write(this + " :onMeasure: " + utils.layout.getMode(widthMode) + " " + width + ", " + utils.layout.getMode(heightMode) + " " + height, trace.categories.Layout); } - - protected onClipToBoundsChanged(oldValue: boolean, newValue: boolean): void { - if (this._nativeView) { - this._nativeView.clipsToBounds = newValue; - } - } } \ No newline at end of file diff --git a/ui/styling/style.ts b/ui/styling/style.ts index afbc73cf1..dcaaef4b1 100644 --- a/ui/styling/style.ts +++ b/ui/styling/style.ts @@ -116,23 +116,35 @@ function onPaddingValueChanged(data: observable.PropertyChangeData) { function onPaddingChanged(data: observable.PropertyChangeData) { var thickness = parseThickness(data.newValue); var style =