Skip to content

Commit 9af29e4

Browse files
author
Vladimir Enchev
committed
Merge pull request NativeScript#573 from NativeScript/search-bar-font
Search bar font
2 parents 49780b5 + 6a42e60 commit 9af29e4

File tree

9 files changed

+143
-29
lines changed

9 files changed

+143
-29
lines changed

CrossPlatformModules.csproj

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@
144144
<TypeScriptCompile Include="apps\animations\model.ts" />
145145
<TypeScriptCompile Include="apps\orientation-demo\main-page.ts" />
146146
<TypeScriptCompile Include="apps\tests\ui\animation\animation-tests.ts" />
147+
<TypeScriptCompile Include="apps\tests\ui\search-bar\search-bar-tests-native.android.ts" />
148+
<TypeScriptCompile Include="apps\tests\ui\search-bar\search-bar-tests-native.d.ts" />
149+
<TypeScriptCompile Include="apps\tests\ui\search-bar\search-bar-tests-native.ios.ts" />
147150
<TypeScriptCompile Include="apps\tests\xml-declaration\inherited-base-page.ts" />
148151
<TypeScriptCompile Include="apps\tests\xml-declaration\inherited-page.ts" />
149152
<TypeScriptCompile Include="apps\ui-tests-app\pages\handlers.ts" />
@@ -1929,7 +1932,7 @@
19291932
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
19301933
</WebProjectProperties>
19311934
</FlavorProperties>
1932-
<UserProperties ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" />
1935+
<UserProperties ui_2scroll-view_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2editable-text-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2absolute-layout-demo_2package_1json__JSONSchema="http://json.schemastore.org/package" apps_2gallery-app_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2content-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2web-view_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2linear-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2absolute-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" ui_2layouts_2dock-layout_2package_1json__JSONSchema="" ui_2layouts_2grid-layout_2package_1json__JSONSchema="" ui_2layouts_2wrap-layout_2package_1json__JSONSchema="http://json.schemastore.org/package" />
19331936
</VisualStudio>
19341937
</ProjectExtensions>
19351938
</Project>

apps/tests/ui/list-view/list-view-tests.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -646,16 +646,16 @@ function loadViewWithItemNumber(args: listViewModule.ItemEventData) {
646646
(<labelModule.Label>args.view).text = "item " + args.index;
647647
}
648648

649-
function getTextFromNativeElementAt(listView: listViewModule.ListView, index: number): any {
649+
function getTextFromNativeElementAt(listView: listViewModule.ListView, index: number): string {
650650
if (listView.android) {
651651
var nativeElement = listView.android.getChildAt(index);
652652
if (nativeElement instanceof android.view.ViewGroup) {
653-
return (<android.widget.TextView>((<any>nativeElement).getChildAt(0))).getText();
653+
return (<android.widget.TextView>((<any>nativeElement).getChildAt(0))).getText() + "";
654654
}
655-
return (<android.widget.TextView>nativeElement).getText();
655+
return (<android.widget.TextView>nativeElement).getText() + "";
656656
}
657657
else if (listView.ios) {
658-
return listView.ios.visibleCells()[index].contentView.subviews[0].text;
658+
return listView.ios.visibleCells()[index].contentView.subviews[0].text + "";
659659
}
660660
}
661661

apps/tests/ui/search-bar/search-bar-tests-native.android.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import colorModule = require("color");
22
import searchBarModule = require("ui/search-bar");
3+
import utils = require("utils/utils");
34

45
function getTextView(bar: android.widget.SearchView): android.widget.TextView {
56
if (bar) {
@@ -20,3 +21,12 @@ export function getNativeHintColor(searchBar: searchBarModule.SearchBar): colorM
2021
}
2122
return undefined;
2223
}
24+
25+
export function getNativeFontSize(searchBar: searchBarModule.SearchBar): number {
26+
var textView = getTextView(searchBar.android);
27+
28+
if (textView) {
29+
return textView.getTextSize() / utils.layout.getDisplayDensity();
30+
}
31+
return undefined;
32+
}

apps/tests/ui/search-bar/search-bar-tests-native.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ import searchBarModule = require("ui/search-bar");
33
import colorModule = require("color");
44

55
export declare function getNativeHintColor(textView: searchBarModule.SearchBar): colorModule.Color;
6+
export declare function getNativeFontSize(searchBar: searchBarModule.SearchBar): number;

apps/tests/ui/search-bar/search-bar-tests-native.ios.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,12 @@ export function getNativeHintColor(searchBar: searchBarModule.SearchBar): colorM
55
// TODO: This test needs to be created
66
return undefined;
77
}
8+
export function getNativeFontSize(searchBar: searchBarModule.SearchBar): number {
9+
var sf = <UITextField>(<any>searchBar)._textField;
10+
if (sf) {
11+
return sf.font.pointSize;
12+
}
13+
14+
return undefined;
15+
}
16+

apps/tests/ui/search-bar/search-bar-tests.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ export var testSearchBarHintColorAndroid = function () {
5858
});
5959
};
6060

61+
export var testSearchBarFontSize = function () {
62+
helper.buildUIAndRunTest(_createSearchBarFunc(), function (views: Array<viewModule.View>) {
63+
var searchBar = <searchBarModule.SearchBar>views[0];
64+
65+
searchBar.text = "";
66+
searchBar.hint = "hint font-size test";
67+
68+
var expectedValue = 30;
69+
var actualValue;
70+
71+
searchBar.style.fontSize = expectedValue;
72+
actualValue = searchBarTestsNative.getNativeFontSize(searchBar);
73+
TKUnit.assert(actualValue === expectedValue, "Actual: " + actualValue + "; Expected: " + expectedValue);
74+
});
75+
};
76+
6177
export function test_DummyTestForSnippetOnly() {
6278
// <snippet module="ui/search-bar" title="search-bar">
6379
// ### Searching

ui/search-bar/search-bar.ios.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) {
1414
function onTextFieldBackgroundColorPropertyChanged(data: dependencyObservable.PropertyChangeData) {
1515
var bar = <SearchBar>data.object;
1616
if (data.newValue instanceof color.Color) {
17-
var tf = getUITextField(bar.ios);
17+
var tf = (<any>bar)._textField;
1818
if (tf) {
1919
tf.backgroundColor = data.newValue.ios;
2020
}
@@ -24,15 +24,15 @@ function onTextFieldBackgroundColorPropertyChanged(data: dependencyObservable.Pr
2424
(<proxy.PropertyMetadata>common.SearchBar.textFieldBackgroundColorProperty.metadata).onSetNativeValue = onTextFieldBackgroundColorPropertyChanged;
2525

2626
function onTextFieldHintColorPropertyChanged(data: dependencyObservable.PropertyChangeData) {
27-
// This should be in a Try Catch in case Apple eliminates which ever method in the future;
28-
try {
29-
// TODO; convert this code into NativeScript Code
27+
// This should be in a Try Catch in case Apple eliminates which ever method in the future;
28+
try {
29+
// TODO; convert this code into NativeScript Code
3030
/* if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
3131
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:textField.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
3232
} */
33-
} catch (Err) {
34-
// Do Nothing
35-
}
33+
} catch (Err) {
34+
// Do Nothing
35+
}
3636
}
3737

3838
(<proxy.PropertyMetadata>common.SearchBar.textFieldHintColorProperty.metadata).onSetNativeValue = onTextFieldHintColorPropertyChanged;
@@ -52,14 +52,6 @@ function onHintPropertyChanged(data: dependencyObservable.PropertyChangeData) {
5252

5353
(<proxy.PropertyMetadata>common.SearchBar.hintProperty.metadata).onSetNativeValue = onHintPropertyChanged;
5454

55-
function getUITextField(bar: UISearchBar): UITextField {
56-
if (bar) {
57-
return <UITextField> bar.valueForKey("_searchField");
58-
}
59-
60-
return undefined;
61-
}
62-
6355
global.moduleMerge(common, exports);
6456

6557
class UISearchBarDelegateImpl extends NSObject implements UISearchBarDelegate {
@@ -102,9 +94,11 @@ class UISearchBarDelegateImpl extends NSObject implements UISearchBarDelegate {
10294
export class SearchBar extends common.SearchBar {
10395
private _ios: UISearchBar;
10496
private _delegate;
97+
public _textField: UITextField;
10598

10699
constructor() {
107100
super();
101+
108102
this._ios = new UISearchBar();
109103

110104
this._delegate = UISearchBarDelegateImpl.new().initWithOwner(this);
@@ -113,6 +107,7 @@ export class SearchBar extends common.SearchBar {
113107
public onLoaded() {
114108
super.onLoaded();
115109
this._ios.delegate = this._delegate;
110+
this._textField = SearchBar.findTextField(this.ios);
116111
}
117112

118113
public onUnloaded() {
@@ -122,5 +117,18 @@ export class SearchBar extends common.SearchBar {
122117

123118
get ios(): UISearchBar {
124119
return this._ios;
120+
}
121+
122+
private static findTextField(view: UIView) {
123+
for (let i = 0, l = view.subviews.count; i < l; i++) {
124+
let v: UIView = view.subviews[i];
125+
if (v instanceof UITextField) {
126+
return v;
127+
} else if (v.subviews.count > 0) {
128+
return SearchBar.findTextField(v);
129+
}
130+
}
131+
132+
return undefined;
125133
}
126134
}

ui/styling/stylers.android.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,45 @@ export class SearchBarStyler implements definition.stylers.Styler {
475475
SearchBarStyler._changeSearchViewTextColor(bar, nativeValue);
476476
}
477477

478+
// font
479+
private static setFontInternalProperty(view: view.View, newValue: any, nativeValue: any) {
480+
var bar = <android.widget.SearchView>view.android;
481+
var textView = SearchBarStyler._getSearchViewTextView(bar);
482+
483+
var fontValue = <font.Font>newValue;
484+
485+
var typeface = fontValue.getAndroidTypeface();
486+
if (typeface) {
487+
textView.setTypeface(typeface);
488+
}
489+
else {
490+
textView.setTypeface(nativeValue.typeface);
491+
}
492+
493+
if (fontValue.fontSize) {
494+
textView.setTextSize(fontValue.fontSize);
495+
}
496+
else {
497+
textView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
498+
}
499+
}
500+
501+
private static resetFontInternalProperty(view: view.View, nativeValue: any) {
502+
var bar = <android.widget.SearchView>view.android;
503+
var textView = SearchBarStyler._getSearchViewTextView(bar);
504+
textView.setTypeface(nativeValue.typeface);
505+
textView.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
506+
}
507+
508+
private static getNativeFontInternalValue(view: view.View): any {
509+
var bar = <android.widget.SearchView>view.android;
510+
var textView = SearchBarStyler._getSearchViewTextView(bar);
511+
return {
512+
typeface: textView.getTypeface(),
513+
size: textView.getTextSize()
514+
};
515+
}
516+
478517
public static registerHandlers() {
479518
style.registerHandler(style.backgroundColorProperty, new stylersCommon.StylePropertyChangedHandler(
480519
SearchBarStyler.setBackgroundColorProperty,
@@ -485,6 +524,11 @@ export class SearchBarStyler implements definition.stylers.Styler {
485524
SearchBarStyler.setColorProperty,
486525
SearchBarStyler.resetColorProperty,
487526
SearchBarStyler.getColorProperty), "SearchBar");
527+
528+
style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler(
529+
SearchBarStyler.setFontInternalProperty,
530+
SearchBarStyler.resetFontInternalProperty,
531+
SearchBarStyler.getNativeFontInternalValue), "SearchBar");
488532
}
489533

490534
private static _getSearchViewTextView(bar: android.widget.SearchView): android.widget.TextView {

ui/styling/stylers.ios.ts

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -409,9 +409,7 @@ export class SearchBarStyler implements definition.stylers.Styler {
409409
}
410410

411411
private static getColorProperty(view: view.View): any {
412-
var bar = <UISearchBar>view.ios;
413-
414-
var sf = <UITextField>bar.valueForKey("_searchField");
412+
var sf = <UITextField>(<any>view)._textField;
415413
if (sf) {
416414
return sf.textColor;
417415
}
@@ -420,23 +418,43 @@ export class SearchBarStyler implements definition.stylers.Styler {
420418
}
421419

422420
private static setColorProperty(view: view.View, newValue: any) {
423-
var bar = <UISearchBar>view.ios;
424-
425-
var sf = <UITextField>bar.valueForKey("_searchField");
421+
var sf = <UITextField>(<any>view)._textField;
426422
if (sf) {
427423
sf.textColor = newValue;
428424
}
429425
}
430426

431427
private static resetColorProperty(view: view.View, nativeValue: any) {
432-
var bar = <UISearchBar>view.ios;
433-
434-
var sf = <UITextField>bar.valueForKey("_searchField");
428+
var sf = <UITextField>(<any>view)._textField;
435429
if (sf) {
436430
sf.textColor = nativeValue;
437431
}
438432
}
439433

434+
// font
435+
private static setFontInternalProperty(view: view.View, newValue: any, nativeValue: any) {
436+
var sf = <UITextField>(<any>view)._textField;
437+
if (sf) {
438+
sf.font = (<font.Font>newValue).getUIFont(nativeValue);
439+
}
440+
}
441+
442+
private static resetFontInternalProperty(view: view.View, nativeValue: any) {
443+
var sf = <UITextField>(<any>view)._textField;
444+
if (sf) {
445+
sf.font = nativeValue;
446+
}
447+
}
448+
449+
private static getNativeFontInternalValue(view: view.View): any {
450+
var sf = <UITextField>(<any>view)._textField;
451+
if (sf) {
452+
return sf.font;
453+
}
454+
455+
return undefined;
456+
}
457+
440458
public static registerHandlers() {
441459
style.registerHandler(style.backgroundColorProperty, new stylersCommon.StylePropertyChangedHandler(
442460
SearchBarStyler.setBackgroundColorProperty,
@@ -447,6 +465,11 @@ export class SearchBarStyler implements definition.stylers.Styler {
447465
SearchBarStyler.setColorProperty,
448466
SearchBarStyler.resetColorProperty,
449467
SearchBarStyler.getColorProperty), "SearchBar");
468+
469+
style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler(
470+
SearchBarStyler.setFontInternalProperty,
471+
SearchBarStyler.resetFontInternalProperty,
472+
SearchBarStyler.getNativeFontInternalValue), "SearchBar");
450473
}
451474
}
452475

0 commit comments

Comments
 (0)