Merge pull request #271 from NativeScript/segmented-bar-android-color

Segmented bar android color
This commit is contained in:
Vladimir Enchev
2015-06-04 09:17:24 +03:00
5 changed files with 58 additions and 3 deletions

View File

@@ -3,3 +3,16 @@
export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number { export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number {
return (<android.widget.TabHost>bar.android).getTabWidget().getTabCount(); return (<android.widget.TabHost>bar.android).getTabWidget().getTabCount();
} }
export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean {
var isValid = true;
for (var tabIndex = 0; tabIndex < bar.android.getTabWidget().getTabCount(); tabIndex++) {
var tabChild = <android.view.ViewGroup>bar.android.getTabWidget().getChildTabViewAt(tabIndex);
var t = <android.widget.TextView>tabChild.getChildAt(1);
isValid = bar.color && bar.color.android === t.getCurrentTextColor();
}
return isValid;
}

View File

@@ -2,3 +2,5 @@
import segmentedBarModule = require("ui/segmented-bar"); import segmentedBarModule = require("ui/segmented-bar");
export declare function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number; export declare function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number;
export declare function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean;

View File

@@ -3,3 +3,12 @@
export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number { export function getNativeItemsCount(bar: segmentedBarModule.SegmentedBar): number {
return (<UISegmentedControl>bar.ios).numberOfSegments; return (<UISegmentedControl>bar.ios).numberOfSegments;
} }
export function checkNativeItemsTextColor(bar: segmentedBarModule.SegmentedBar): boolean {
var isValid = true;
var attrs = (<UISegmentedControl>bar.ios).titleTextAttributesForState(UIControlState.UIControlStateNormal);
isValid = bar.color && attrs && attrs.valueForKey(NSForegroundColorAttributeName) === bar.color.ios;
return isValid;
}

View File

@@ -2,6 +2,9 @@
import helper = require("../helper"); import helper = require("../helper");
import viewModule = require("ui/core/view"); import viewModule = require("ui/core/view");
import segmentedBarTestsNative = require("./segmented-bar-tests-native"); import segmentedBarTestsNative = require("./segmented-bar-tests-native");
import bindable = require("ui/core/bindable");
import observable = require("data/observable");
import color = require("color");
// <snippet module="ui/segmented-bar" title="SegmentedBar"> // <snippet module="ui/segmented-bar" title="SegmentedBar">
// # SegmentedBar // # SegmentedBar
@@ -57,6 +60,24 @@ export var testWhenSettingItemsToNonEmptyArrayTheSameAmountOfNativeItemsIsCreate
}); });
} }
export var testWhenItemsAreBoundTheTextColorIsPreserved = function () {
helper.buildUIAndRunTest(_createSegmentedBar(), function (views: Array<viewModule.View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];
segmentedBar.color = new color.Color("red");
var model = new observable.Observable();
model.set("items", [{ title: "One" }, { title: "Two" }, { title: "Three" }]);
var options: bindable.BindingOptions = {
sourceProperty: "items",
targetProperty: "items"
}
segmentedBar.bind(options, model);
TKUnit.assert(segmentedBarTestsNative.checkNativeItemsTextColor(segmentedBar), "Items text color not preserved" + "; Expected: " + segmentedBar.color);
});
}
export var testWhenSettingItemsToEmptyArrayZeroNativeItemsAreCreated = function () { export var testWhenSettingItemsToEmptyArrayZeroNativeItemsAreCreated = function () {
helper.buildUIAndRunTest(_createSegmentedBar(), function (views: Array<viewModule.View>) { helper.buildUIAndRunTest(_createSegmentedBar(), function (views: Array<viewModule.View>) {
var segmentedBar = <segmentedBarModule.SegmentedBar>views[0]; var segmentedBar = <segmentedBarModule.SegmentedBar>views[0];

View File

@@ -64,10 +64,11 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
view.android.setOnTabChangedListener(null); view.android.setOnTabChangedListener(null);
view.android.setOnTabChangedListener(view._listener); view.android.setOnTabChangedListener(view._listener);
if (view.selectedBackgroundColor) { var tabHost = <android.widget.TabHost>view.android;
var tabHost = <android.widget.TabHost>view.android; var tabIndex: number;
for (var tabIndex = 0; tabIndex < tabHost.getTabWidget().getTabCount(); tabIndex++) { if (view.selectedBackgroundColor) {
for (tabIndex = 0; tabIndex < tabHost.getTabWidget().getTabCount(); tabIndex++) {
var vg = <android.view.ViewGroup>tabHost.getTabWidget().getChildTabViewAt(tabIndex); var vg = <android.view.ViewGroup>tabHost.getTabWidget().getChildTabViewAt(tabIndex);
var stateDrawable = new android.graphics.drawable.StateListDrawable(); var stateDrawable = new android.graphics.drawable.StateListDrawable();
@@ -82,6 +83,15 @@ function onItemsPropertyChanged(data: dependencyObservable.PropertyChangeData) {
vg.setBackgroundDrawable(stateDrawable); vg.setBackgroundDrawable(stateDrawable);
} }
} }
for (tabIndex = 0; tabIndex < tabHost.getTabWidget().getTabCount(); tabIndex++) {
var tabChild = <android.view.ViewGroup>tabHost.getTabWidget().getChildTabViewAt(tabIndex);
var t = <android.widget.TextView>tabChild.getChildAt(1);
if (view.color) {
t.setTextColor(view.color.android);
}
}
} }
} }
(<proxy.PropertyMetadata>common.SegmentedBar.itemsProperty.metadata).onSetNativeValue = onItemsPropertyChanged; (<proxy.PropertyMetadata>common.SegmentedBar.itemsProperty.metadata).onSetNativeValue = onItemsPropertyChanged;