diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index e2f433958..b262c50d3 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -61,6 +61,9 @@
+
+ action-bar-hidden.xml
+
action-items-text.xml
@@ -84,6 +87,9 @@
main-page.xml
+
+ Designer
+
@@ -1755,7 +1761,7 @@
False
-
+
\ No newline at end of file
diff --git a/apps/action-bar-demo/main-page.xml b/apps/action-bar-demo/main-page.xml
index a4600175b..2658a4c3e 100644
--- a/apps/action-bar-demo/main-page.xml
+++ b/apps/action-bar-demo/main-page.xml
@@ -2,6 +2,7 @@
+
diff --git a/apps/action-bar-demo/pages/action-bar-hidden.ts b/apps/action-bar-demo/pages/action-bar-hidden.ts
new file mode 100644
index 000000000..95b686e5c
--- /dev/null
+++ b/apps/action-bar-demo/pages/action-bar-hidden.ts
@@ -0,0 +1,9 @@
+import pages = require("ui/page");
+import view = require("ui/core/view");
+
+var toggle = false;
+export function toggleTap(args) {
+ var page = view.getAncestor(args.object, "Page")
+ page.actionBarHidden = toggle;
+ toggle = !toggle;
+}
\ No newline at end of file
diff --git a/apps/action-bar-demo/pages/action-bar-hidden.xml b/apps/action-bar-demo/pages/action-bar-hidden.xml
new file mode 100644
index 000000000..e45f7252e
--- /dev/null
+++ b/apps/action-bar-demo/pages/action-bar-hidden.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ui/action-bar/action-bar-common.ts b/ui/action-bar/action-bar-common.ts
index 7f50ed917..8ba4d1642 100644
--- a/ui/action-bar/action-bar-common.ts
+++ b/ui/action-bar/action-bar-common.ts
@@ -158,16 +158,16 @@ export class ActionBar extends view.View implements dts.ActionBar {
}
}
- public _shouldShow(): boolean {
+ public _isEmpty(): boolean {
if (this.title ||
(this.android && this.android.icon) ||
this.navigationButton ||
this.actionItems.getItems().length > 0) {
- return true;
+ return false;
}
- return false;
+ return true;
}
}
diff --git a/ui/action-bar/action-bar.android.ts b/ui/action-bar/action-bar.android.ts
index 50e476a82..b57a29fa5 100644
--- a/ui/action-bar/action-bar.android.ts
+++ b/ui/action-bar/action-bar.android.ts
@@ -105,6 +105,20 @@ export class ActionBar extends common.ActionBar {
public _updateAndroid(menu: android.view.IMenu) {
var actionBar: android.app.ActionBar = frame.topmost().android.actionBar;
+ if (this.page.actionBarHidden) {
+ if (actionBar.isShowing()) {
+ actionBar.hide();
+ }
+
+ // If action bar is hidden - no need to fill it with items.
+ return;
+ }
+
+ // Assure action bar is showing;
+ if (!actionBar.isShowing()) {
+ actionBar.show();
+ }
+
this._addActionItems(menu);
// Set title
diff --git a/ui/action-bar/action-bar.d.ts b/ui/action-bar/action-bar.d.ts
index 4040d6386..f28e4379c 100644
--- a/ui/action-bar/action-bar.d.ts
+++ b/ui/action-bar/action-bar.d.ts
@@ -49,7 +49,7 @@ declare module "ui/action-bar" {
update();
//@private
- _shouldShow(): boolean
+ _isEmpty(): boolean
_updateAndroid(menu: android.view.IMenu);
_onAndroidItemSelected(itemId: number): boolean
diff --git a/ui/frame/frame.ios.ts b/ui/frame/frame.ios.ts
index 1d49afde6..44204b43b 100644
--- a/ui/frame/frame.ios.ts
+++ b/ui/frame/frame.ios.ts
@@ -5,6 +5,7 @@ import pages = require("ui/page");
import enums = require("ui/enums");
import utils = require("utils/utils");
import view = require("ui/core/view");
+import types = require("utils/types");
declare var exports;
require("utils/module-merge").merge(frameCommon, exports);
@@ -84,7 +85,12 @@ export class Frame extends frameCommon.Frame {
case enums.NavigationBarVisibility.auto:
var pageInstance: pages.Page = page || this.currentPage;
- newValue = this.backStack.length > 0 || (pageInstance && pageInstance.actionBar._shouldShow());
+ if (pageInstance && types.isDefined(pageInstance.actionBarHidden)) {
+ newValue = !pageInstance.actionBarHidden;
+ }
+ else {
+ newValue = this.backStack.length > 0 || (pageInstance && !pageInstance.actionBar._isEmpty());
+ }
newValue = !!newValue; // Make sure it is boolean
break;
}
diff --git a/ui/page/page-common.ts b/ui/page/page-common.ts
index 559f58f31..d634f3a57 100644
--- a/ui/page/page-common.ts
+++ b/ui/page/page-common.ts
@@ -10,23 +10,23 @@ import actionBar = require("ui/action-bar");
import dependencyObservable = require("ui/core/dependency-observable");
import proxy = require("ui/core/proxy");
-var navigationBarHiddenProperty = new dependencyObservable.Property(
- "navigationBarHidden",
+var actionBarHiddenProperty = new dependencyObservable.Property(
+ "actionBarHidden",
"Page",
new proxy.PropertyMetadata(undefined, dependencyObservable.PropertyMetadataSettings.AffectsLayout)
);
-function onNavigationBarHiddenPropertyChanged(data: dependencyObservable.PropertyChangeData) {
+function onActionBarHiddenPropertyChanged(data: dependencyObservable.PropertyChangeData) {
var page = data.object;
if (page.isLoaded) {
- page._updateNavigationBar(data.newValue);
+ page._updateActionBar(data.newValue);
}
}
-(navigationBarHiddenProperty.metadata).onSetNativeValue = onNavigationBarHiddenPropertyChanged;
+(actionBarHiddenProperty.metadata).onSetNativeValue = onActionBarHiddenPropertyChanged;
export class Page extends contentView.ContentView implements dts.Page {
- public static navigationBarHiddenProperty = navigationBarHiddenProperty;
+ public static actionBarHiddenProperty = actionBarHiddenProperty;
public static navigatingToEvent = "navigatingTo";
public static navigatedToEvent = "navigatedTo";
public static navigatingFromEvent = "navigatingFrom";
@@ -47,22 +47,22 @@ export class Page extends contentView.ContentView implements dts.Page {
public onLoaded() {
this._applyCss();
- if (this.navigationBarHidden !== undefined) {
- this._updateNavigationBar(this.navigationBarHidden);
+ if (this.actionBarHidden !== undefined) {
+ this._updateActionBar(this.actionBarHidden);
}
super.onLoaded();
}
- get navigationBarHidden(): boolean {
- return this._getValue(Page.navigationBarHiddenProperty);
+ get actionBarHidden(): boolean {
+ return this._getValue(Page.actionBarHiddenProperty);
}
- set navigationBarHidden(value: boolean) {
- this._setValue(Page.navigationBarHiddenProperty, value);
+ set actionBarHidden(value: boolean) {
+ this._setValue(Page.actionBarHiddenProperty, value);
}
- public _updateNavigationBar(hidden: boolean) {
+ public _updateActionBar(hidden: boolean) {
//
}
diff --git a/ui/page/page.android.ts b/ui/page/page.android.ts
index 2a38284c2..ef661979f 100644
--- a/ui/page/page.android.ts
+++ b/ui/page/page.android.ts
@@ -83,26 +83,7 @@ export class Page extends pageCommon.Page {
this._onDetached(true);
}
- public _updateNavigationBar(hidden: boolean) {
- if (!this.frame || !this.frame.android) {
- return;
- }
-
- var actionBar = this.frame.android.actionBar;
-
- if (!actionBar) {
- return;
- }
-
- if (hidden) {
- if (actionBar.isShowing()) {
- actionBar.hide();
- }
- }
- else {
- if (!actionBar.isShowing()) {
- actionBar.show();
- }
- }
+ public _updateActionBar(hidden: boolean) {
+ this.actionBar.update();
}
}
\ No newline at end of file
diff --git a/ui/page/page.d.ts b/ui/page/page.d.ts
index 267360ac7..f5f6c06ee 100644
--- a/ui/page/page.d.ts
+++ b/ui/page/page.d.ts
@@ -49,7 +49,7 @@ declare module "ui/page" {
/**
* Dependency property used to hide the Navigation Bar in iOS and the Action Bar in Android.
*/
- public static navigationBarHiddenProperty: dependencyObservable.Property;
+ public static actionBarHiddenProperty: dependencyObservable.Property;
/**
* String value used when hooking to shownModally event.
@@ -81,7 +81,7 @@ declare module "ui/page" {
/**
* Used to hide the Navigation Bar in iOS and the Action Bar in Android.
*/
- navigationBarHidden: boolean;
+ actionBarHidden: boolean;
/**
* A valid css string which will be applied for all nested UI components (based on css rules).
diff --git a/ui/page/page.ios.ts b/ui/page/page.ios.ts
index 87511e22a..51139e2d3 100644
--- a/ui/page/page.ios.ts
+++ b/ui/page/page.ios.ts
@@ -3,6 +3,7 @@ import definition = require("ui/page");
import viewModule = require("ui/core/view");
import trace = require("trace");
import utils = require("utils/utils");
+import types = require("utils/types");
declare var exports;
require("utils/module-merge").merge(pageCommon, exports);
@@ -148,8 +149,8 @@ export class Page extends pageCommon.Page {
(this)._UIModalPresentationFormSheet = false;
}
- public _updateNavigationBar(hidden: boolean) {
- if (this.ios.navigationController.navigationBarHidden !== hidden) {
+ public _updateActionBar(hidden: boolean) {
+ if (types.isDefined(hidden) && this.ios.navigationController.navigationBarHidden !== hidden) {
this.ios.navigationController.navigationBarHidden = hidden;
this.requestLayout();
}
diff --git a/ui/tab-view/tab-view.android.ts b/ui/tab-view/tab-view.android.ts
index 291b7d6f1..e289b34a0 100644
--- a/ui/tab-view/tab-view.android.ts
+++ b/ui/tab-view/tab-view.android.ts
@@ -347,7 +347,7 @@ export class TabView extends common.TabView {
public _addTabs(newItems: Array) {
var parentPage = view.getAncestor(this, "Page");
- if (parentPage && parentPage.navigationBarHidden) {
+ if (parentPage && parentPage.actionBarHidden) {
return;
}
@@ -424,7 +424,7 @@ export class TabView extends common.TabView {
public _removeTabs(oldItems: Array) {
var parentPage = view.getAncestor(this, "Page");
- if (parentPage && parentPage.navigationBarHidden) {
+ if (parentPage && parentPage.actionBarHidden) {
return;
}