mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-16 11:42:04 +08:00
Added TabViewItem change support for Android. Fixed empty titles for SegmentedBar and TabView.
This commit is contained in:
@ -46,10 +46,8 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
|||||||
if (newItems && newItems.length) {
|
if (newItems && newItems.length) {
|
||||||
for (var i = 0; i < newItems.length; i++) {
|
for (var i = 0; i < newItems.length; i++) {
|
||||||
(<SegmentedBarItem>newItems[i])._parent = view;
|
(<SegmentedBarItem>newItems[i])._parent = view;
|
||||||
var title = "" + newItems[i].title;
|
|
||||||
var tab = view.android.newTabSpec(i + "");
|
var tab = view.android.newTabSpec(i + "");
|
||||||
|
tab.setIndicator(newItems[i].title || "");
|
||||||
tab.setIndicator(title);
|
|
||||||
|
|
||||||
tab.setContent(new android.widget.TabHost.TabContentFactory({
|
tab.setContent(new android.widget.TabHost.TabContentFactory({
|
||||||
createTabContent: function (tag: string): android.view.View {
|
createTabContent: function (tag: string): android.view.View {
|
||||||
@ -124,7 +122,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem {
|
|||||||
var tabIndex = this._parent.items.indexOf(this);
|
var tabIndex = this._parent.items.indexOf(this);
|
||||||
var titleTextViewId = 16908310; // http://developer.android.com/reference/android/R.id.html#title
|
var titleTextViewId = 16908310; // http://developer.android.com/reference/android/R.id.html#title
|
||||||
var titleTextView = <android.widget.TextView>this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId);
|
var titleTextView = <android.widget.TextView>this._parent.android.getTabWidget().getChildAt(tabIndex).findViewById(titleTextViewId);
|
||||||
titleTextView.setText("" + this.title);
|
titleTextView.setText(this.title || "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
|
|||||||
var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
|
var newItems = <Array<definition.SegmentedBarItem>>data.newValue;
|
||||||
if (newItems && newItems.length) {
|
if (newItems && newItems.length) {
|
||||||
for (var i = 0; i < newItems.length; i++) {
|
for (var i = 0; i < newItems.length; i++) {
|
||||||
view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title, i, false);
|
view.ios.insertSegmentWithTitleAtIndexAnimated(newItems[i].title || "", i, false);
|
||||||
(<SegmentedBarItem>newItems[i])._parent = view;
|
(<SegmentedBarItem>newItems[i])._parent = view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ export class SegmentedBarItem extends common.SegmentedBarItem {
|
|||||||
public _update() {
|
public _update() {
|
||||||
if (this._parent) {
|
if (this._parent) {
|
||||||
var tabIndex = this._parent.items.indexOf(this);
|
var tabIndex = this._parent.items.indexOf(this);
|
||||||
this._parent.ios.setTitleForSegmentAtIndex("" + this.title, tabIndex);
|
this._parent.ios.setTitleForSegmentAtIndex(this.title || "", tabIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
|
|||||||
set title(value: string) {
|
set title(value: string) {
|
||||||
if (this._title !== value) {
|
if (this._title !== value) {
|
||||||
this._title = value;
|
this._title = value;
|
||||||
|
this._update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,6 +30,9 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
|
|||||||
|
|
||||||
set view(value: view.View) {
|
set view(value: view.View) {
|
||||||
if (this._view !== value) {
|
if (this._view !== value) {
|
||||||
|
if (this._view) {
|
||||||
|
throw new Error("Changing the view of an already loaded TabViewItem is not currently supported.");
|
||||||
|
}
|
||||||
this._view = value;
|
this._view = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -40,8 +44,13 @@ export class TabViewItem extends bindable.Bindable implements definition.TabView
|
|||||||
set iconSource(value: string) {
|
set iconSource(value: string) {
|
||||||
if (this._iconSource !== value) {
|
if (this._iconSource !== value) {
|
||||||
this._iconSource = value;
|
this._iconSource = value;
|
||||||
|
this._update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public _update() {
|
||||||
|
//
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var TAB_VIEW = "TabView";
|
var TAB_VIEW = "TabView";
|
||||||
|
@ -133,6 +133,20 @@ class PagerAdapterClass extends android.support.v4.view.PagerAdapter {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export class TabViewItem extends common.TabViewItem {
|
||||||
|
public _tab: android.app.ActionBar.Tab;
|
||||||
|
public _parent: TabView;
|
||||||
|
|
||||||
|
public _update() {
|
||||||
|
if (this._parent && this._tab) {
|
||||||
|
var androidApp = app.android;
|
||||||
|
var resources = androidApp.context.getResources();
|
||||||
|
this._tab.setText(this.title);
|
||||||
|
this._parent._setIcon(this.iconSource, this._tab, resources, androidApp.packageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TabView extends common.TabView {
|
export class TabView extends common.TabView {
|
||||||
private _android: android.support.v4.view.ViewPager;
|
private _android: android.support.v4.view.ViewPager;
|
||||||
private _pagerAdapter: android.support.v4.view.PagerAdapter;
|
private _pagerAdapter: android.support.v4.view.PagerAdapter;
|
||||||
@ -374,13 +388,15 @@ export class TabView extends common.TabView {
|
|||||||
// TODO: Where will be the support for more ActionBar settings like Title, Navigation buttons, etc.?
|
// TODO: Where will be the support for more ActionBar settings like Title, Navigation buttons, etc.?
|
||||||
var i: number = 0;
|
var i: number = 0;
|
||||||
var length = newItems.length;
|
var length = newItems.length;
|
||||||
var item: definition.TabViewItem;
|
var item: TabViewItem;
|
||||||
var tab: android.app.ActionBar.Tab;
|
var tab: android.app.ActionBar.Tab;
|
||||||
var androidApp = app.android;
|
var androidApp = app.android;
|
||||||
var resources = androidApp.context.getResources();
|
var resources = androidApp.context.getResources();
|
||||||
for (i; i < length; i++) {
|
for (i; i < length; i++) {
|
||||||
item = newItems[i];
|
item = <TabViewItem>newItems[i];
|
||||||
tab = actionBar.newTab();
|
tab = actionBar.newTab();
|
||||||
|
item._tab = tab;
|
||||||
|
item._parent = this;
|
||||||
tab.setText(item.title);
|
tab.setText(item.title);
|
||||||
this._setIcon(item.iconSource, tab, resources, androidApp.packageName);
|
this._setIcon(item.iconSource, tab, resources, androidApp.packageName);
|
||||||
|
|
||||||
@ -392,7 +408,7 @@ export class TabView extends common.TabView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void {
|
public _setIcon(iconSource: string, tab: android.app.ActionBar.Tab, resources: android.content.res.Resources, packageName: string): void {
|
||||||
if (!iconSource) {
|
if (!iconSource) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -438,7 +454,7 @@ export class TabView extends common.TabView {
|
|||||||
var i: number = actionBar.getTabCount() - 1;
|
var i: number = actionBar.getTabCount() - 1;
|
||||||
var tab: android.app.ActionBar.Tab;
|
var tab: android.app.ActionBar.Tab;
|
||||||
var index;
|
var index;
|
||||||
for (i; i >= 0; i--) {
|
for (; i >= 0; i--) {
|
||||||
tab = actionBar.getTabAt(i);
|
tab = actionBar.getTabAt(i);
|
||||||
index = this._tabsAddedByMe.indexOf(tab);
|
index = this._tabsAddedByMe.indexOf(tab);
|
||||||
if (index > -1) {// This tab was added by me.
|
if (index > -1) {// This tab was added by me.
|
||||||
@ -449,6 +465,15 @@ export class TabView extends common.TabView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
var length = this.items.length;
|
||||||
|
var item: TabViewItem;
|
||||||
|
for (; i < length; i++) {
|
||||||
|
item = <TabViewItem>this.items[i];
|
||||||
|
item._tab = null;
|
||||||
|
item._parent = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (this._tabsAddedByMe.length > 0) {
|
if (this._tabsAddedByMe.length > 0) {
|
||||||
throw new Error("TabView did not remove all of its tabs from the ActionBar.");
|
throw new Error("TabView did not remove all of its tabs from the ActionBar.");
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,22 @@ class UINavigationControllerDelegateImpl extends NSObject implements UINavigatio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class TabViewItem extends common.TabViewItem {
|
||||||
|
public _controller: UIViewController;
|
||||||
|
public _parent: TabView;
|
||||||
|
|
||||||
|
public _update() {
|
||||||
|
if (this._parent && this._controller) {
|
||||||
|
var icon = this._parent._getIcon(this.iconSource);
|
||||||
|
var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((this.title || ""), icon, this._parent.items.indexOf(this));
|
||||||
|
if (!icon) {
|
||||||
|
tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
|
||||||
|
}
|
||||||
|
this._controller.tabBarItem = tabBarItem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TabView extends common.TabView {
|
export class TabView extends common.TabView {
|
||||||
private _ios: UITabBarControllerImpl;
|
private _ios: UITabBarControllerImpl;
|
||||||
private _delegate: UITabBarControllerDelegateImpl;
|
private _delegate: UITabBarControllerDelegateImpl;
|
||||||
@ -128,9 +144,11 @@ export class TabView extends common.TabView {
|
|||||||
|
|
||||||
var i: number;
|
var i: number;
|
||||||
var length = oldItems.length;
|
var length = oldItems.length;
|
||||||
var oldItem: definition.TabViewItem;
|
var oldItem: TabViewItem;
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
oldItem = oldItems[i];
|
oldItem = <TabViewItem>oldItems[i];
|
||||||
|
oldItem._parent = null;
|
||||||
|
oldItem._controller = null;
|
||||||
this._removeView(oldItem.view);
|
this._removeView(oldItem.view);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,12 +161,12 @@ export class TabView extends common.TabView {
|
|||||||
|
|
||||||
var i: number;
|
var i: number;
|
||||||
var length = newItems.length;
|
var length = newItems.length;
|
||||||
var item: definition.TabViewItem;
|
var item: TabViewItem;
|
||||||
var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length);
|
var newControllers: NSMutableArray = NSMutableArray.alloc().initWithCapacity(length);
|
||||||
var newController: UIViewController;
|
var newController: UIViewController;
|
||||||
|
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
item = newItems[i];
|
item = <TabViewItem>newItems[i];
|
||||||
|
|
||||||
this._addView(item.view);
|
this._addView(item.view);
|
||||||
|
|
||||||
@ -159,12 +177,16 @@ export class TabView extends common.TabView {
|
|||||||
newController.view.addSubview(item.view.ios);
|
newController.view.addSubview(item.view.ios);
|
||||||
}
|
}
|
||||||
|
|
||||||
var icon = this._getIcon(item.iconSource);
|
item._parent = this;
|
||||||
newController.tabBarItem = UITabBarItem.alloc().initWithTitleImageTag(item.title, icon, i);
|
item._controller = newController;
|
||||||
if (!icon) {
|
|
||||||
newController.tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
|
|
||||||
}
|
|
||||||
|
|
||||||
|
var icon = this._getIcon(item.iconSource);
|
||||||
|
|
||||||
|
var tabBarItem = UITabBarItem.alloc().initWithTitleImageTag((item.title || ""), icon, i);
|
||||||
|
if (!icon) {
|
||||||
|
tabBarItem.setTitlePositionAdjustment({ horizontal: 0, vertical: -20 });
|
||||||
|
}
|
||||||
|
newController.tabBarItem = tabBarItem;
|
||||||
newControllers.addObject(newController);
|
newControllers.addObject(newController);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -175,7 +197,7 @@ export class TabView extends common.TabView {
|
|||||||
this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate;
|
this._ios.moreNavigationController.delegate = this._moreNavigationControllerDelegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getIcon(iconSource: string): UIImage {
|
public _getIcon(iconSource: string): UIImage {
|
||||||
if (!iconSource) {
|
if (!iconSource) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user