Skip to content

Commit 79662ca

Browse files
bundyoVladimirAmiorkov
authored andcommitted
Add support to set PickerPage navigation button in Android (#15)
* Add support to set PickerPage navigation button in Android * Fix the iOS navigation button issue * chore: code refactoring
1 parent 331439e commit 79662ca

File tree

5 files changed

+27
-23
lines changed

5 files changed

+27
-23
lines changed

demo-angular/src/app/examples/styling/styling-example.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<GridLayout rows="50, *">
55
<PickerField row="0" col="0" hint="This is hint" padding="10" class="picker-field" textField="name" id="picker"
66
[items]="pickerItems" [pickerTitle]="pickerTitle" iOSCloseButtonIcon="14" iOSCloseButtonPosition="left"
7-
androidCloseButtonPosition="actionBar" androidCloseButtonIcon="ic_media_previous">
7+
androidCloseButtonPosition="navigationButton" androidCloseButtonIcon="ic_menu_back">
88
<ng-template let-item="item">
99
<GridLayout columns="auto, *" rows="auto, *">
1010
<Label text="Static text: " colSpan="2" class="item-template-top-label"></Label>

demo-vue/app/components/Styling.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
textField="name"
1414
iOSCloseButtonIcon="14"
1515
iOSCloseButtonPosition="left"
16-
androidCloseButtonPosition="actionBar"
17-
androidCloseButtonIcon="ic_media_previous">
16+
androidCloseButtonPosition="navigationButton"
17+
androidCloseButtonIcon="ic_menu_back">
1818
<v-template>
1919
<GridLayout columns="auto, *" rows="auto, *">
2020
<Label text="Static text: " colSpan="2" class="item-template-top-label"></Label>

demo/app/examples/styling/styling-page.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
pickerTitle="{{ pickerTitle }}"
99
iOSCloseButtonIcon="14"
1010
iOSCloseButtonPosition="left"
11-
androidCloseButtonPosition="actionBar"
12-
androidCloseButtonIcon="ic_media_previous">
11+
androidCloseButtonPosition="navigationButton"
12+
androidCloseButtonIcon="ic_menu_back">
1313
<picker:PickerField.itemTemplate>
1414
<GridLayout columns="auto, *" rows="auto, *">
1515
<Label text="Static text: " colSpan="2" class="item-template-top-label"></Label>

src/picker.common.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ import { fromObject } from "tns-core-modules/data/observable";
1111
import { addWeakEventListener, removeWeakEventListener } from "tns-core-modules/ui/core/weak-event-listener";
1212
import { ObservableArray, ChangedData } from "tns-core-modules/data/observable-array/observable-array";
1313
import { GridLayout } from 'tns-core-modules/ui/layouts/grid-layout/grid-layout';
14-
import { ActionItem } from 'tns-core-modules/ui/action-bar/action-bar';
14+
import { ActionItem, NavigationButton } from 'tns-core-modules/ui/action-bar/action-bar';
1515
import { Frame } from 'tns-core-modules/ui/frame/frame';
16+
import { isAndroid } from 'tns-core-modules/platform';
1617

1718
export interface ItemsSource {
1819
length: number;
@@ -47,7 +48,7 @@ export class PickerField extends TextField implements TemplatedItemsView {
4748
public selectedIndex: number;
4849
public iOSCloseButtonPosition: "left" | "right";
4950
public iOSCloseButtonIcon: number;
50-
public androidCloseButtonPosition: "actionBar" | "actionBarIfRoom" | "popup";
51+
public androidCloseButtonPosition: "navigationButton" | "actionBar" | "actionBarIfRoom" | "popup";
5152
public androidCloseButtonIcon: string;
5253
private _modalListView: ListView;
5354
private _modalRoot: Frame;
@@ -96,31 +97,34 @@ export class PickerField extends TextField implements TemplatedItemsView {
9697

9798
this.applyCssScope(this._page.actionBar);
9899

99-
let actionItem = new ActionItem();
100-
actionItem.text = "Close";
101-
actionItem.on(Button.tapEvent, (args: ItemEventData) => {
102-
this.closeCallback(undefined, undefined);
103-
});
100+
const isNavigationButton = isAndroid && this.androidCloseButtonPosition === "navigationButton";
101+
const closeButton = isNavigationButton ? new NavigationButton() : new ActionItem();
104102

105-
this.applyCssScope(<any>actionItem);
103+
closeButton.text = "Close";
104+
closeButton.on(Button.tapEvent, () => {
105+
this.closeCallback();
106+
});
107+
this.applyCssScope(<any>closeButton);
106108

107-
if (actionItem.ios) {
108-
actionItem.ios.position = this.iOSCloseButtonPosition;
109-
actionItem.ios.systemIcon = this.iOSCloseButtonIcon;
109+
if (closeButton.ios) {
110+
closeButton.ios.position = this.iOSCloseButtonPosition;
111+
closeButton.ios.systemIcon = this.iOSCloseButtonIcon;
110112
}
111-
112-
if (actionItem.android) {
113-
actionItem.android.systemIcon = this.androidCloseButtonIcon;
114-
actionItem.android.position = this.androidCloseButtonPosition;
113+
if (closeButton.android) {
114+
closeButton.android.systemIcon = this.androidCloseButtonIcon;
115+
closeButton.android.position = <any>this.androidCloseButtonPosition;
115116
}
116117

117-
this._page.actionBar.actionItems.addItem(actionItem);
118+
if (isNavigationButton) {
119+
this._page.actionBar.navigationButton = closeButton;
120+
} else {
121+
this._page.actionBar.actionItems.addItem(closeButton);
122+
}
118123

119124
this._modalRoot.on(Page.shownModallyEvent, this.shownModallyHandler.bind(this));
120125

121126
this._modalListView.on(ListView.itemLoadingEvent, this.listViewItemLoadingHandler.bind(this));
122127
this._modalListView.on(ListView.itemTapEvent, this.listViewItemTapHandler.bind(this));
123-
this.applyCssScope(this._modalListView);
124128
this._modalListView.items = this.items;
125129

126130
this.applyCssScope(this._modalGridLayout);

src/picker.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ export class PickerField extends TextField implements TemplatedItemsView {
7777
/**
7878
* Gets or sets the position of the 'close' button of the ActionBar of the modal view.
7979
*/
80-
public androidCloseButtonPosition: "actionBar" | "actionBarIfRoom" | "popup";
80+
public androidCloseButtonPosition: "navigationButton" | "actionBar" | "actionBarIfRoom" | "popup";
8181

8282
/**
8383
* Gets or sets the icon of the 'close' button of the ActionBar of the modal view.

0 commit comments

Comments
 (0)