From 079830e9b5073858d0bf4f4c15357ed570304ec8 Mon Sep 17 00:00:00 2001 From: Hristo Hristov Date: Mon, 5 Dec 2016 00:58:20 +0200 Subject: [PATCH] tab-view --- .../ui/tab-view/tab-view-common.ts | 47 +-- .../ui/tab-view/tab-view.android.ts | 393 ++++++------------ tns-core-modules/ui/tab-view/tab-view.d.ts | 1 + 3 files changed, 149 insertions(+), 292 deletions(-) diff --git a/tns-core-modules/ui/tab-view/tab-view-common.ts b/tns-core-modules/ui/tab-view/tab-view-common.ts index d6dfc6a0f..9cf01fca9 100644 --- a/tns-core-modules/ui/tab-view/tab-view-common.ts +++ b/tns-core-modules/ui/tab-view/tab-view-common.ts @@ -5,14 +5,13 @@ import { Bindable } from "ui/core/bindable"; import { isIOS } from "platform"; import { Color } from "color"; -import types = require("utils/types"); import trace = require("trace"); -export let traceCategory = "TabView"; +export const traceCategory = "TabView"; // TODO: Change base class to ViewBase and use addView method to add it. // This way we will support property and binding propagation automatically. -export class TabViewItemBase extends Bindable implements TabViewItemDefinition { +export abstract class TabViewItemBase extends Bindable implements TabViewItemDefinition { private _title: string = ""; private _view: View; private _iconSource: string; @@ -31,7 +30,6 @@ export class TabViewItemBase extends Bindable implements TabViewItemDefinition { get view(): View { return this._view; } - set view(value: View) { if (this._view !== value) { if (this._view) { @@ -45,7 +43,6 @@ export class TabViewItemBase extends Bindable implements TabViewItemDefinition { get iconSource(): string { return this._iconSource; } - set iconSource(value: string) { if (this._iconSource !== value) { this._iconSource = value; @@ -53,9 +50,7 @@ export class TabViewItemBase extends Bindable implements TabViewItemDefinition { } } - public _update() { - // - } + public abstract _update(); } export module knownCollections { @@ -78,20 +73,6 @@ export class TabViewBase extends View implements TabViewDefinition, AddArrayFrom } } - public _onItemsPropertyChangedSetNativeValue() { - let oldValue = this.previousItems; - if (oldValue) { - this._removeTabs(oldValue); - } - - let newValue = this.items; - if (newValue) { - this._addTabs(newValue); - } - - this._updateSelectedIndexOnItemsPropertyChanged(newValue); - } - public _updateSelectedIndexOnItemsPropertyChanged(newItems) { if (trace.enabled) { trace.write("TabView._updateSelectedIndexOnItemsPropertyChanged(" + newItems + ");", traceCategory); @@ -104,7 +85,7 @@ export class TabViewBase extends View implements TabViewDefinition, AddArrayFrom if (newItemsCount === 0) { this.selectedIndex = undefined; } - else if (types.isUndefined(this.selectedIndex) || this.selectedIndex >= newItemsCount) { + else if (this.selectedIndex < 0 || this.selectedIndex >= newItemsCount) { this.selectedIndex = 0; } } @@ -143,13 +124,13 @@ export class TabViewBase extends View implements TabViewDefinition, AddArrayFrom public _onSelectedIndexPropertyChangedSetNativeValue() { let index = this.selectedIndex; - if (types.isUndefined(index)) { + if (index < 0) { return; } - if (types.isDefined(this.items)) { - if (index < 0 || index >= this.items.length) { - this.selectedIndex = undefined; + if (this.items) { + if (index >= this.items.length) { + this.selectedIndex = unsetValue; throw new Error("SelectedIndex should be between [0, items.length)"); } } @@ -194,9 +175,8 @@ export class TabViewBase extends View implements TabViewDefinition, AddArrayFrom public _onBindingContextChanged(oldValue: any, newValue: any) { super._onBindingContextChanged(oldValue, newValue); if (this.items && this.items.length > 0) { - let i = 0; - let length = this.items.length; - for (; i < length; i++) { + + for (let i = 0, length = this.items.length; i < length; i++) { this.items[i].bindingContext = newValue; } } @@ -218,13 +198,6 @@ export class TabViewBase extends View implements TabViewDefinition, AddArrayFrom this._onSelectedIndexPropertyChangedSetNativeValue(); } - get [itemsProperty.native](): TabViewItemBase[] { - return null; - } - set [itemsProperty.native](value: TabViewItemBase[]) { - this._onItemsPropertyChangedSetNativeValue(); - } - public onItemsPropertyChanged(oldValue: TabViewItemDefinition[], newValue: TabViewItemDefinition[]) { this.previousItems = oldValue; } diff --git a/tns-core-modules/ui/tab-view/tab-view.android.ts b/tns-core-modules/ui/tab-view/tab-view.android.ts index 9e91a89b2..205b5ee36 100644 --- a/tns-core-modules/ui/tab-view/tab-view.android.ts +++ b/tns-core-modules/ui/tab-view/tab-view.android.ts @@ -1,29 +1,23 @@ -import common = require("./tab-view-common"); -import definition = require("ui/tab-view"); -import dependencyObservable = require("ui/core/dependency-observable"); -import view = require("ui/core/view"); +import { TabViewBase, TabViewItemBase, itemsProperty, selectedIndexProperty, selectedColorProperty, tabsBackgroundColorProperty, traceCategory } from "./tab-view-common" +import { View, colorProperty, fontInternalProperty } from "ui/core/view"; +import { Property } from "ui/core/properties"; +import { Bindable } from "ui/core/bindable"; +import { isIOS } from "platform"; +import { Color } from "color"; +import { Font } from "ui/styling/font"; +import { fromFileOrResource } from "image-source"; import trace = require("trace"); -import types = require("utils/types"); -import utils = require("utils/utils"); -import style = require("ui/styling/style"); -import font = require("ui/styling/font"); -import * as imageSourceModule from "image-source"; -var imageSource: typeof imageSourceModule; -function ensureImageSource() { - if (!imageSource) { - imageSource = require("image-source"); - } -} +export * from "./tab-view-common"; -var VIEWS_STATES = "_viewStates"; -var ACCENT_COLOR = "colorAccent"; -var PRIMARY_COLOR = "colorPrimary"; -var DEFAULT_ELEVATION = 4; -global.moduleMerge(common, exports); -export class TabViewItem extends common.TabViewItem { +const VIEWS_STATES = "_viewStates"; +const ACCENT_COLOR = "colorAccent"; +const PRIMARY_COLOR = "colorPrimary"; +const DEFAULT_ELEVATION = 4; + +export class TabViewItem extends TabViewItemBase { public _parent: TabView; public _update() { @@ -33,7 +27,7 @@ export class TabViewItem extends common.TabViewItem { } } -var PagerAdapterClass; +let PagerAdapterClass; function ensurePagerAdapterClass() { if (PagerAdapterClass) { return; @@ -41,9 +35,9 @@ function ensurePagerAdapterClass() { class PagerAdapterClassInner extends android.support.v4.view.PagerAdapter { private owner: TabView; - private items: Array; + private items: Array; - constructor(owner: TabView, items: Array) { + constructor(owner: TabView, items: Array) { super(); this.owner = owner; @@ -66,17 +60,17 @@ function ensurePagerAdapterClass() { instantiateItem(container: android.view.ViewGroup, index: number) { if (trace.enabled) { - trace.write("TabView.PagerAdapter.instantiateItem; container: " + container + "; index: " + index, common.traceCategory); + trace.write("TabView.PagerAdapter.instantiateItem; container: " + container + "; index: " + index, traceCategory); } - var item = this.items[index]; + let item = this.items[index]; if (item.view.parent !== this.owner) { this.owner._addView(item.view); } if (this[VIEWS_STATES]) { if (trace.enabled) { - trace.write("TabView.PagerAdapter.instantiateItem; restoreHierarchyState: " + item.view, common.traceCategory); + trace.write("TabView.PagerAdapter.instantiateItem; restoreHierarchyState: " + item.view, traceCategory); } item.view._nativeView.restoreHierarchyState(this[VIEWS_STATES]); } @@ -87,10 +81,10 @@ function ensurePagerAdapterClass() { destroyItem(container: android.view.ViewGroup, index: number, _object: any) { if (trace.enabled) { - trace.write("TabView.PagerAdapter.destroyItem; container: " + container + "; index: " + index + "; _object: " + _object, common.traceCategory); + trace.write("TabView.PagerAdapter.destroyItem; container: " + container + "; index: " + index + "; _object: " + _object, traceCategory); } - var item = this.items[index]; - var nativeView = item.view._nativeView; + let item = this.items[index]; + let nativeView = item.view._nativeView; if (nativeView.toString() !== _object.toString()) { throw new Error("Expected " + nativeView.toString() + " to equal " + _object.toString()); @@ -111,10 +105,10 @@ function ensurePagerAdapterClass() { saveState(): android.os.Parcelable { if (trace.enabled) { - trace.write("TabView.PagerAdapter.saveState", common.traceCategory); + trace.write("TabView.PagerAdapter.saveState", traceCategory); } - var owner: TabView = this.owner; + let owner: TabView = this.owner; if (!owner || owner._childrenCount === 0) { return null; } @@ -122,9 +116,9 @@ function ensurePagerAdapterClass() { if (!this[VIEWS_STATES]) { this[VIEWS_STATES] = new android.util.SparseArray(); } - var viewStates = this[VIEWS_STATES]; - var childCallback = function (view: view.View): boolean { - var nativeView: android.view.View = view._nativeView; + let viewStates = this[VIEWS_STATES]; + let childCallback = function (view: View): boolean { + let nativeView: android.view.View = view._nativeView; if (nativeView && nativeView.isSaveFromParentEnabled && nativeView.isSaveFromParentEnabled()) { nativeView.saveHierarchyState(viewStates); } @@ -132,16 +126,16 @@ function ensurePagerAdapterClass() { } owner._eachChildView(childCallback); - var bundle = new android.os.Bundle(); + let bundle = new android.os.Bundle(); bundle.putSparseParcelableArray(VIEWS_STATES, viewStates); return bundle; } restoreState(state: android.os.Parcelable, loader: java.lang.ClassLoader) { if (trace.enabled) { - trace.write("TabView.PagerAdapter.restoreState", common.traceCategory); + trace.write("TabView.PagerAdapter.restoreState", traceCategory); } - var bundle: android.os.Bundle = state; + let bundle: android.os.Bundle = state; bundle.setClassLoader(loader); this[VIEWS_STATES] = bundle.getSparseParcelableArray(VIEWS_STATES); } @@ -150,7 +144,7 @@ function ensurePagerAdapterClass() { PagerAdapterClass = PagerAdapterClassInner; } -var PageChangedListenerClass; +let PageChangedListenerClass; function ensurePageChangedListenerClass() { if (PageChangedListenerClass) { return; @@ -172,7 +166,7 @@ function ensurePageChangedListenerClass() { PageChangedListenerClass = PageChangedListener; } -export class TabView extends common.TabView { +export class TabView extends TabViewBase { private _grid: org.nativescript.widgets.GridLayout; private _tabLayout: org.nativescript.widgets.TabLayout; private _viewPager: android.support.v4.view.ViewPager; @@ -187,7 +181,7 @@ export class TabView extends common.TabView { public _createUI() { if (trace.enabled) { - trace.write("TabView._createUI(" + this + ");", common.traceCategory); + trace.write("TabView._createUI(" + this + ");", traceCategory); } this._grid = new org.nativescript.widgets.GridLayout(this._context); @@ -212,13 +206,13 @@ export class TabView extends common.TabView { if (this._androidViewId < 0) { this._androidViewId = android.view.View.generateViewId(); } - + this._viewPager = new android.support.v4.view.ViewPager(this._context); if (this._androidOffscreenTabLimit !== 1) { this._viewPager.setOffscreenPageLimit(this._androidOffscreenTabLimit); } this._viewPager.setId(this._androidViewId); - var lp = new org.nativescript.widgets.CommonLayoutParams(); + let lp = new org.nativescript.widgets.CommonLayoutParams(); lp.row = 1; this._viewPager.setLayoutParams(lp); this._grid.addView(this._viewPager); @@ -229,7 +223,7 @@ export class TabView extends common.TabView { } private setElevation() { - var compat = android.support.v4.view.ViewCompat; + let compat = android.support.v4.view.ViewCompat; if (compat.setElevation) { let val = DEFAULT_ELEVATION * utils.layout.getDisplayDensity(); compat.setElevation(this._grid, val); @@ -237,28 +231,24 @@ export class TabView extends common.TabView { } } - public _onItemsPropertyChangedSetNativeValue(data: dependencyObservable.PropertyChangeData) { - if (trace.enabled) { - trace.write("TabView._onItemsPropertyChangedSetNativeValue(" + data.oldValue + " ---> " + data.newValue + ");", common.traceCategory); - } - - if (data.oldValue) { - var oldItems: Array = data.oldValue; + public _onItemsPropertyChangedSetNativeValue() { + let oldItems = this.previousItems; + if (oldItems) { oldItems.forEach((oldItem) => { // _removeView is called within destroyItem method - oldItem._parent = null; + oldItem._parent = null; }); - + this._viewPager.setAdapter(null); this._pagerAdapter = null; this._tabLayout.setItems(null, null); } - if (data.newValue) { - var items: Array = data.newValue; - var tabItems = new Array(); + let items = this.items; + if (items) { + let tabItems = new Array(); items.forEach((item, idx, arr) => { - if (types.isNullOrUndefined(item.view)) { + if (!item.view) { throw new Error("View of TabViewItem at index " + idx + " is " + item.view); } @@ -270,48 +260,49 @@ export class TabView extends common.TabView { }); ensurePagerAdapterClass(); - this._pagerAdapter = new PagerAdapterClass(this, data.newValue); + // TODO: optimize by reusing the adapter and calling setAdapter(null) then the same adapter. + this._pagerAdapter = new PagerAdapterClass(this, items); this._viewPager.setAdapter(this._pagerAdapter); this._tabLayout.setItems(tabItems, this._viewPager); } - this._updateSelectedIndexOnItemsPropertyChanged(data.newValue); + this._updateSelectedIndexOnItemsPropertyChanged(items); } public _updateTabForItem(item: TabViewItem) { if (this.items && this.items.length > 0) { - var index = this.items.indexOf(item); + let index = this.items.indexOf(item); if (index >= 0) { this._tabLayout.updateItemAt(index, this.createTabItem(item)); } } } - public _onSelectedIndexPropertyChangedSetNativeValue(data: dependencyObservable.PropertyChangeData) { + public _onSelectedIndexPropertyChangedSetNativeValue() { if (trace.enabled) { - trace.write("TabView._onSelectedIndexPropertyChangedSetNativeValue(" + data.oldValue + " ---> " + data.newValue + ");", common.traceCategory); + trace.write("TabView._onSelectedIndexPropertyChangedSetNativeValue(" + data.oldValue + " ---> " + data.newValue + ");", traceCategory); } super._onSelectedIndexPropertyChangedSetNativeValue(data); - var index = data.newValue; + let index = data.newValue; if (!types.isNullOrUndefined(index)) { // Select the respective page in the ViewPager - var viewPagerSelectedIndex = this._viewPager.getCurrentItem(); + let viewPagerSelectedIndex = this._viewPager.getCurrentItem(); if (viewPagerSelectedIndex !== index) { if (trace.enabled) { - trace.write("TabView this._viewPager.setCurrentItem(" + index + ", true);", common.traceCategory); + trace.write("TabView this._viewPager.setCurrentItem(" + index + ", true);", traceCategory); } this._viewPager.setCurrentItem(index, true); } } - var args = { eventName: TabView.selectedIndexChangedEvent, object: this, oldIndex: data.oldValue, newIndex: data.newValue }; + let args = { eventName: TabView.selectedIndexChangedEvent, object: this, oldIndex: data.oldValue, newIndex: data.newValue }; this.notify(args); } - private createTabItem(item: definition.TabViewItem): org.nativescript.widgets.TabItemSpec { - var result = new org.nativescript.widgets.TabItemSpec(); + private createTabItem(item: TabViewItem): org.nativescript.widgets.TabItemSpec { + let result = new org.nativescript.widgets.TabItemSpec(); result.title = item.title; if (item.iconSource) { @@ -320,9 +311,7 @@ export class TabView extends common.TabView { result.iconId = utils.ad.resources.getDrawableId(item.iconSource.substr(utils.RESOURCE_PREFIX.length)); } else { - ensureImageSource(); - - var is = imageSource.fromFileOrResource(item.iconSource); + let is = imageSource.fromFileOrResource(item.iconSource); if (is) { result.iconDrawable = new android.graphics.drawable.BitmapDrawable(is.android); } @@ -332,206 +321,100 @@ export class TabView extends common.TabView { return result; } - public _getAndroidTabView(): org.nativescript.widgets.TabLayout { - return this._tabLayout; + get [itemsProperty.native](): TabViewItemBase[] { + return null; + } + set [itemsProperty.native](value: TabViewItemBase[]) { + this._onItemsPropertyChangedSetNativeValue(); } - private _androidOffscreenTabLimit: number = 1; - get androidOffscreenTabLimit(): number { - return this._androidOffscreenTabLimit; + get [selectedColorProperty.native](): number { + //from https://developer.android.com/samples/SlidingTabsColors/src/com.example.android.common/view/SlidingTabStrip.html + return 0xFF33B5E5; } - set androidOffscreenTabLimit(value: number) { - if (value !== this._androidOffscreenTabLimit) { - this._androidOffscreenTabLimit = value; - if (this._viewPager) { - this._viewPager.setOffscreenPageLimit(value); - } + set [selectedColorProperty.native](value: number | Color) { + let tabLayout = this._tabLayout; + let color = value instanceof Color ? value.android : value; + tabLayout.setSelectedIndicatorColors([color]); + } + + get [tabsBackgroundColorProperty.native](): android.graphics.drawable.Drawable { + return this._tabLayout.getBackground(); + } + set [tabsBackgroundColorProperty.native](value: android.graphics.drawable.Drawable | Color) { + if (value instanceof Color) { + this._tabLayout.setBackgroundColor(value.android); + } else { + this._tabLayout.setBackground(value); } } -} + get [colorProperty.native](): number { + let items = this.items; + if (items && items.length > 0) { + let tv = this._tabLayout.getTextViewForItemAt(0); + if (tv) { + return tv.getTextColors().getDefaultColor(); + } + } -export class TabViewStyler implements style.Styler { + return undefined; + } + set [colorProperty.native](value: number | Color) { + let items = this.items; + if (items && items.length > 0) { + let color = value instanceof Color ? value.android : value; + let tabLayout = this._tabLayout; - // font - private static setFontInternalProperty(v: view.View, newValue: any, nativeValue?: any) { - var tab = v; - var fontValue = newValue; - var typeface = fontValue.getAndroidTypeface(); - - if (tab.items && tab.items.length > 0) { - var tabLayout = tab._getAndroidTabView(); - - for (var i = 0; i < tab.items.length; i++) { + for (let i = 0, length = items.length; i < length; i++) { let tv = tabLayout.getTextViewForItemAt(i); - if (typeface) { - tv.setTypeface(typeface); - } - else { - tv.setTypeface(nativeValue.typeface); - } - - if (fontValue.fontSize) { - tv.setTextSize(fontValue.fontSize); - } - else { - tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size); - } + tv.setTextColor(color); } } } - private static resetFontInternalProperty(v: view.View, nativeValue: any) { - var tab = v; - - if (tab.items && tab.items.length > 0) { - var tabLayout = tab._getAndroidTabView(); - - for (var i = 0; i < tab.items.length; i++) { - let tv = tabLayout.getTextViewForItemAt(i); - tv.setTypeface(nativeValue.typeface); - tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size); - } - } - } - - private static getNativeFontInternalValue(v: view.View): any { - var tab = v; - var tv: android.widget.TextView = tab._getAndroidTabView().getTextViewForItemAt(0); - if (tv) { + get [fontInternalProperty.native](): { typeface: android.graphics.Typeface, fontSize: number } { + let items = this.items; + if (items && items.length > 0) { + let tabLayout = this._tabLayout; + let tv = tabLayout.getTextViewForItemAt(0); return { typeface: tv.getTypeface(), - size: tv.getTextSize() + fontSize: tv.getTextSize() + }; + } + + return { + typeface: undefined, + fontSize: undefined + }; + } + set [fontInternalProperty.native](value: Font | { typeface: android.graphics.Typeface, fontSize: number }) { + let typeface: android.graphics.Typeface; + let fontSize = value.fontSize; + let isFont: boolean; + if (value instanceof Font) { + isFont = true; + typeface = value.getAndroidTypeface(); + } else { + typeface = value.typeface; + } + + let items = this.items; + if (items && items.length > 0) { + let tabLayout = this._tabLayout; + + for (let i = 0, length = items.length; i < length; i++) { + let tv = tabLayout.getTextViewForItemAt(i); + tv.setTypeface(typeface); + + if (isFont) { + tv.setTextSize(fontSize); + } + else { + tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, fontSize); + } } } - else { - return null; - } - } - - // tab-text-color - private static setTabTextColorProperty(v: view.View, newValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setTabTextColor(types.isNumber(newValue) ? new java.lang.Integer(newValue) : newValue); - } - - private static resetTabTextColorProperty(v: view.View, nativeValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setTabTextColor(types.isNumber(nativeValue) ? new java.lang.Integer(nativeValue) : nativeValue); - } - - private static getTabTextColorProperty(v: view.View): any { - var tabLayout = (v)._getAndroidTabView(); - return tabLayout.getTabTextColor(); - } - - //tab-background-color - private static setTabBackgroundColorProperty(v: view.View, newValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setBackgroundColor(newValue); - } - - private static resetTabBackgroundColorProperty(v: view.View, nativeValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setBackgroundColor(nativeValue); - } - - private static getTabBackgroundColorProperty(v: view.View): any { - var tabLayout = (v)._getAndroidTabView(); - let background = tabLayout.getBackground(); - if (background instanceof android.graphics.drawable.ColorDrawable){ - return (background).getColor(); - } - return null; - } - - //selected-tab-text-color - private static setSelectedTabTextColorProperty(v: view.View, newValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setSelectedTabTextColor(types.isNumber(newValue) ? new java.lang.Integer(newValue) : newValue); - } - - private static resetSelectedTabTextColorProperty(v: view.View, nativeValue: any) { - var tabLayout = (v)._getAndroidTabView(); - tabLayout.setSelectedTabTextColor(types.isNumber(nativeValue) ? new java.lang.Integer(nativeValue) : nativeValue); - } - - private static getSelectedTabTextColorProperty(v: view.View): any { - var tabLayout = (v)._getAndroidTabView(); - return tabLayout.getSelectedTabTextColor(); - } - - // android-selected-tab-highlight-color-property - private static setAndroidSelectedTabHighlightColorProperty(v: view.View, newValue: any) { - let tabLayout = (v)._getAndroidTabView(); - tabLayout.setSelectedIndicatorColors([newValue]); - } - - private static resetAndroidSelectedTabHighlightColorProperty(v: view.View, nativeValue: any) { - let tabLayout = (v)._getAndroidTabView(); - tabLayout.setSelectedIndicatorColors([nativeValue]); - } - - private static getAndroidSelectedTabHighlightColorProperty(v: view.View): any { - let tabLayout = (v)._getAndroidTabView(); - let selectedIndicatorColors = tabLayout.getSelectedIndicatorColors(); - return selectedIndicatorColors.length > 0 ? selectedIndicatorColors[0] : null; - } - - // text-transform - private static setTextTransformProperty(v: view.View, newValue: any) { - let tabView = v; - let tabLayout = tabView._getAndroidTabView(); - for (let i = 0; i < tabView.items.length; i++) { - let textView = tabLayout.getTextViewForItemAt(i); - let str = tabView.items[i].title; - let result = utils.ad.getTransformedString(newValue, textView, str); - textView.setText(result); - } - } - - private static resetTextTransformProperty(v: view.View, nativeValue: any) { - let tabView = v; - let tabLayout = tabView._getAndroidTabView(); - for (let i = 0; i < tabView.items.length; i++) { - let textView = tabLayout.getTextViewForItemAt(i); - let str = tabView.items[i].title; - let result = utils.ad.getTransformedString(nativeValue, textView, str); - textView.setText(result); - } - } - - public static registerHandlers() { - - style.registerHandler(style.fontInternalProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setFontInternalProperty, - TabViewStyler.resetFontInternalProperty, - TabViewStyler.getNativeFontInternalValue), "TabView"); - - style.registerHandler(style.tabTextColorProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setTabTextColorProperty, - TabViewStyler.resetTabTextColorProperty, - TabViewStyler.getTabTextColorProperty), "TabView"); - - style.registerHandler(style.tabBackgroundColorProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setTabBackgroundColorProperty, - TabViewStyler.resetTabBackgroundColorProperty, - TabViewStyler.getTabBackgroundColorProperty), "TabView"); - - style.registerHandler(style.selectedTabTextColorProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setSelectedTabTextColorProperty, - TabViewStyler.resetSelectedTabTextColorProperty, - TabViewStyler.getSelectedTabTextColorProperty), "TabView"); - - style.registerHandler(style.androidSelectedTabHighlightColorProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setAndroidSelectedTabHighlightColorProperty, - TabViewStyler.resetAndroidSelectedTabHighlightColorProperty, - TabViewStyler.getAndroidSelectedTabHighlightColorProperty), "TabView"); - - style.registerHandler(style.textTransformProperty, new style.StylePropertyChangedHandler( - TabViewStyler.setTextTransformProperty, - TabViewStyler.resetTextTransformProperty), "TabView"); } } - -TabViewStyler.registerHandlers(); \ No newline at end of file diff --git a/tns-core-modules/ui/tab-view/tab-view.d.ts b/tns-core-modules/ui/tab-view/tab-view.d.ts index ea9576339..414729615 100644 --- a/tns-core-modules/ui/tab-view/tab-view.d.ts +++ b/tns-core-modules/ui/tab-view/tab-view.d.ts @@ -144,4 +144,5 @@ declare module "ui/tab-view" { export const itemsProperty: Property; export const selectedIndexProperty: Property; export const selectedColorProperty: Property; + export const tabsBackgroundColorProperty: Property; }