diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index cd05937ca..a8b27225d 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -572,6 +572,7 @@
+
Designer
@@ -722,9 +723,9 @@
Designer
-
- camera.d.ts
-
+
+ camera.d.ts
+
camera.d.ts
@@ -1558,7 +1559,7 @@
False
-
+
\ No newline at end of file
diff --git a/apps/gallery-app/content/border.xml b/apps/gallery-app/content/border.xml
new file mode 100644
index 000000000..265858ba7
--- /dev/null
+++ b/apps/gallery-app/content/border.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/apps/gallery-app/main-page.xml b/apps/gallery-app/main-page.xml
index 1fb2fbcc0..5afa03258 100644
--- a/apps/gallery-app/main-page.xml
+++ b/apps/gallery-app/main-page.xml
@@ -16,6 +16,7 @@
+
diff --git a/ui/border/border-common.ts b/ui/border/border-common.ts
index 563b16ccd..d516ebe48 100644
--- a/ui/border/border-common.ts
+++ b/ui/border/border-common.ts
@@ -81,4 +81,8 @@ export class Border extends contentView.ContentView implements definition.Border
var borderSize = this.borderWidth * density;
viewModule.View.layoutChild(this, this.content, borderSize, borderSize, right - left - borderSize, bottom - top - borderSize);
}
+
+ public _updateAndroidBorder() {
+ // This is android specific method.
+ }
}
\ No newline at end of file
diff --git a/ui/border/border.android.ts b/ui/border/border.android.ts
index e75d152ff..557493399 100644
--- a/ui/border/border.android.ts
+++ b/ui/border/border.android.ts
@@ -1,63 +1,53 @@
import borderCommon = require("ui/border/border-common");
import proxy = require("ui/core/proxy");
+import view = require("ui/core/view");
import dependencyObservable = require("ui/core/dependency-observable");
import color = require("color");
+import utils = require("utils/utils");
// merge the exports of the common file with the exports of this file
declare var exports;
require("utils/module-merge").merge(borderCommon, exports);
-function onCornerRadiusPropertyChanged(data: dependencyObservable.PropertyChangeData) {
- var view = data.object;
- if (!view._nativeView) {
- return;
- }
-
- if (view._nativeView instanceof android.view.ViewGroup) {
- var gd = new android.graphics.drawable.GradientDrawable();
-
- gd.setCornerRadius(data.newValue);
- gd.setStroke(view.borderWidth, view.borderColor.android);
-
- (view._nativeView).setBackgroundDrawable(gd);
- }
+function onBorderPropertyChanged(data: dependencyObservable.PropertyChangeData) {
+ var border = data.object;
+ border._updateAndroidBorder();
}
-(borderCommon.Border.cornerRadiusProperty.metadata).onSetNativeValue = onCornerRadiusPropertyChanged;
-function onBorderWidthPropertyChanged(data: dependencyObservable.PropertyChangeData) {
- var view = data.object;
- if (!view._nativeView) {
- return;
- }
-
- if (view._nativeView instanceof android.view.ViewGroup) {
- var gd = new android.graphics.drawable.GradientDrawable();
-
- gd.setCornerRadius(view.cornerRadius);
- gd.setStroke(data.newValue, view.borderColor.android);
-
- (view._nativeView).setBackgroundDrawable(gd);
- }
-}
-(borderCommon.Border.borderWidthProperty.metadata).onSetNativeValue = onBorderWidthPropertyChanged;
-
-function onBorderColorPropertyChanged(data: dependencyObservable.PropertyChangeData) {
- var view = data.object;
- if (!view._nativeView) {
- return;
- }
-
- if (view._nativeView instanceof android.view.ViewGroup && data.newValue instanceof color.Color) {
- var gd = new android.graphics.drawable.GradientDrawable();
-
- gd.setCornerRadius(view.cornerRadius);
- gd.setStroke(view.borderWidth, data.newValue.android);
-
- (view._nativeView).setBackgroundDrawable(gd);
- }
-}
-(borderCommon.Border.borderColorProperty.metadata).onSetNativeValue = onBorderColorPropertyChanged;
+(borderCommon.Border.cornerRadiusProperty.metadata).onSetNativeValue = onBorderPropertyChanged;
+(borderCommon.Border.borderWidthProperty.metadata).onSetNativeValue = onBorderPropertyChanged;
+(borderCommon.Border.borderColorProperty.metadata).onSetNativeValue = onBorderPropertyChanged;
export class Border extends borderCommon.Border {
- //
+ public _updateAndroidBorder() {
+ if (!this._nativeView) {
+ return;
+ }
+
+ var nativeView = this._nativeView;
+
+ var backgroundDrawable = nativeView.getBackground();
+ if (!(backgroundDrawable instanceof android.graphics.drawable.GradientDrawable)) {
+ backgroundDrawable = new android.graphics.drawable.GradientDrawable();
+ nativeView.setBackgroundDrawable(backgroundDrawable);
+ }
+
+ var gd = backgroundDrawable;
+ var density = utils.layout.getDisplayDensity();
+ gd.setCornerRadius(this.cornerRadius * density);
+
+ if (this.borderColor) {
+ gd.setStroke(this.borderWidth * density, this.borderColor.android);
+ }
+ else {
+ gd.setStroke(this.borderWidth * density, android.graphics.Color.TRANSPARENT);
+ }
+
+ if (this.backgroundColor) {
+ gd.setColor(this.backgroundColor.android);
+ }
+ else {
+ gd.setColor(android.graphics.Color.TRANSPARENT);
+ }
+ }
}
\ No newline at end of file
diff --git a/ui/border/border.d.ts b/ui/border/border.d.ts
index 5293676c0..6f8770306 100644
--- a/ui/border/border.d.ts
+++ b/ui/border/border.d.ts
@@ -28,5 +28,9 @@ declare module "ui/border" {
* Gets or sets the border color of the border component.
*/
borderColor: color.Color;
+
+ //@private
+ _updateAndroidBorder();
+ //@endprivate
}
}
\ No newline at end of file
diff --git a/ui/styling/stylers.android.ts b/ui/styling/stylers.android.ts
index 4f4c9f129..2084ad276 100644
--- a/ui/styling/stylers.android.ts
+++ b/ui/styling/stylers.android.ts
@@ -1,6 +1,7 @@
import types = require("utils/types");
import trace = require("trace");
import view = require("ui/core/view");
+import border = require("ui/border");
import constants = require("utils/android_constants");
import style = require("ui/styling/style");
import definition = require("ui/styling");
@@ -343,6 +344,25 @@ export class SearchBarStyler implements definition.stylers.Styler {
}
}
+export class BorderStyler implements definition.stylers.Styler {
+ //Background methods
+ private static setBackgroundProperty(view: view.View, newValue: any) {
+ var border = view;
+ border._updateAndroidBorder();
+ }
+
+ private static resetBackgroundProperty(view: view.View, nativeValue: any) {
+ var border = view;
+ border._updateAndroidBorder();
+ }
+
+ public static registerHandlers() {
+ style.registerHandler(style.backgroundColorProperty, new stylersCommon.StylePropertyChangedHandler(
+ BorderStyler.setBackgroundProperty,
+ BorderStyler.resetBackgroundProperty), "Border");
+ }
+}
+
export function _registerDefaultStylers() {
style.registerNoStylingClass("Frame");
DefaultStyler.registerHandlers();
@@ -351,4 +371,5 @@ export function _registerDefaultStylers() {
ActivityIndicatorStyler.registerHandlers();
SegmentedBarStyler.registerHandlers();
SearchBarStyler.registerHandlers();
+ BorderStyler.registerHandlers();
}