From e514f70337520ceb49ce7fa6a88c3f792bd5839c Mon Sep 17 00:00:00 2001 From: Huang Yu Date: Wed, 25 Nov 2015 20:54:31 -0800 Subject: [PATCH 1/4] Fix StyleSheet 'textAlign' for AndroidTextInput change `setTextAlign` and `setTextAlignVertical` to receive argument of type `String`, so that native props and stylesheet props are calling the same @ReactMethod - add demo (may not be necessary) --- .../UIExplorer/TextInputExample.android.js | 40 ++++++++++++++++ Libraries/Components/TextInput/TextInput.js | 8 +--- .../textinput/ReactTextInputManager.java | 47 +++++++++++-------- 3 files changed, 70 insertions(+), 25 deletions(-) diff --git a/Examples/UIExplorer/TextInputExample.android.js b/Examples/UIExplorer/TextInputExample.android.js index 31156b50d5f861..415b0236436cbf 100644 --- a/Examples/UIExplorer/TextInputExample.android.js +++ b/Examples/UIExplorer/TextInputExample.android.js @@ -313,6 +313,46 @@ exports.examples = [ ); } }, + { + title: 'Text input, Alignment (Horizontal Demo Only)', + render: function() { + return ( + + + + + + + + + + ); + } + }, { title: 'Passwords', render: function() { diff --git a/Libraries/Components/TextInput/TextInput.js b/Libraries/Components/TextInput/TextInput.js index e7416e833bf001..821b6d0844f9a0 100644 --- a/Libraries/Components/TextInput/TextInput.js +++ b/Libraries/Components/TextInput/TextInput.js @@ -497,10 +497,6 @@ var TextInput = React.createClass({ _renderAndroid: function() { var autoCapitalize = UIManager.UIText.AutocapitalizationType[this.props.autoCapitalize]; - var textAlign = - UIManager.AndroidTextInput.Constants.TextAlign[this.props.textAlign]; - var textAlignVertical = - UIManager.AndroidTextInput.Constants.TextAlignVertical[this.props.textAlignVertical]; var children = this.props.children; var childCount = 0; ReactChildren.forEach(children, () => ++childCount); @@ -517,8 +513,8 @@ var TextInput = React.createClass({ style={[this.props.style]} autoCapitalize={autoCapitalize} autoCorrect={this.props.autoCorrect} - textAlign={textAlign} - textAlignVertical={textAlignVertical} + textAlign={this.props.textAlign} + textAlignVertical={this.props.textAlignVertical} keyboardType={this.props.keyboardType} mostRecentEventCount={this.state.mostRecentEventCount} multiline={this.props.multiline} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 6e4a3f44970188..09f9feac61c78e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -11,7 +11,8 @@ import javax.annotation.Nullable; -import java.util.Map; +import java.util.Map; +import java.util.HashMap; import android.graphics.PorterDuff; import android.os.SystemClock; @@ -29,6 +30,7 @@ import com.facebook.infer.annotation.Assertions; import com.facebook.react.bridge.JSApplicationCausedNativeException; +import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.MapBuilder; @@ -59,6 +61,24 @@ public class ReactTextInputManager extends private static final String KEYBOARD_TYPE_NUMERIC = "numeric"; private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0]; + private static final Map> TEXT_ALIGN_CONSTANTS; + static { + TEXT_ALIGN_CONSTANTS = MapBuilder.of( + ViewProps.TEXT_ALIGN, + MapBuilder.of( + "left", Gravity.LEFT, + "right", Gravity.RIGHT, + "auto", Gravity.NO_GRAVITY, + "start", Gravity.START, + "center", Gravity.CENTER_HORIZONTAL, + "end", Gravity.END), + "textAlignVertical", + MapBuilder.of( + "top", Gravity.TOP, + "center", Gravity.CENTER_VERTICAL, + "bottom", Gravity.BOTTOM)); + } + @Override public String getName() { return REACT_CLASS; @@ -189,13 +209,17 @@ public void setUnderlineColor(ReactEditText view, @Nullable Integer underlineCol } } - @ReactProp(name = "textAlign") - public void setTextAlign(ReactEditText view, int gravity) { + @ReactProp(name = ViewProps.TEXT_ALIGN) + public void setTextAlign(ReactEditText view, @Nullable String textAlign) { + Map constants = TEXT_ALIGN_CONSTANTS.get(ViewProps.TEXT_ALIGN); + int gravity = constants.get(textAlign); view.setGravityHorizontal(gravity); } @ReactProp(name = "textAlignVertical") - public void setTextAlignVertical(ReactEditText view, int gravity) { + public void setTextAlignVertical(ReactEditText view, @Nullable String textAlignVertical) { + Map constants = TEXT_ALIGN_CONSTANTS.get("textAlignVertical"); + int gravity = constants.get(textAlignVertical); view.setGravityVertical(gravity); } @@ -417,19 +441,4 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent keyEvent) { } }); } - - @Override - public @Nullable Map getExportedViewConstants() { - return MapBuilder.of( - "TextAlign", - MapBuilder.of( - "start", Gravity.START, - "center", Gravity.CENTER_HORIZONTAL, - "end", Gravity.END), - "TextAlignVertical", - MapBuilder.of( - "top", Gravity.TOP, - "center", Gravity.CENTER_VERTICAL, - "bottom", Gravity.BOTTOM)); - } } From 4281d91329033bd5e050c965ddc61e8481c5b1a7 Mon Sep 17 00:00:00 2001 From: Huang Yu Date: Sat, 5 Dec 2015 10:17:42 -0800 Subject: [PATCH 2/4] remove duplicate examples of textAlign prop remove textAlign and textAlignVertical from Android native props add textAlignVertical as Text Style Prop (Android only) add TEXT_ALIGN_VERTICAL as a view prop constant --- .../UIExplorer/TextInputExample.android.js | 52 ++----------------- Libraries/Components/TextInput/TextInput.js | 20 ------- Libraries/Text/TextStylePropTypes.js | 6 +++ .../facebook/react/uimanager/ViewProps.java | 1 + .../textinput/ReactTextInputManager.java | 51 +++++++++--------- 5 files changed, 34 insertions(+), 96 deletions(-) diff --git a/Examples/UIExplorer/TextInputExample.android.js b/Examples/UIExplorer/TextInputExample.android.js index 415b0236436cbf..1d0f67ef536eb4 100644 --- a/Examples/UIExplorer/TextInputExample.android.js +++ b/Examples/UIExplorer/TextInputExample.android.js @@ -313,46 +313,6 @@ exports.examples = [ ); } }, - { - title: 'Text input, Alignment (Horizontal Demo Only)', - render: function() { - return ( - - - - - - - - - - ); - } - }, { title: 'Passwords', render: function() { @@ -387,25 +347,19 @@ exports.examples = [ placeholder="multiline, aligned top-left" placeholderTextColor="red" multiline={true} - textAlign="start" - textAlignVertical="top" - style={styles.multiline} + style={[styles.multiline, {textAlign: "left", textAlignVertical: "top"}]} /> + style={[styles.multiline, {color: 'blue'}, {textAlign: "right", textAlignVertical: "bottom"}]}> multiline with children, aligned bottom-right diff --git a/Libraries/Components/TextInput/TextInput.js b/Libraries/Components/TextInput/TextInput.js index 821b6d0844f9a0..5a21050527990a 100644 --- a/Libraries/Components/TextInput/TextInput.js +++ b/Libraries/Components/TextInput/TextInput.js @@ -116,24 +116,6 @@ var TextInput = React.createClass({ * The default value is false. */ autoFocus: PropTypes.bool, - /** - * Set the position of the cursor from where editing will begin. - * @platform android - */ - textAlign: PropTypes.oneOf([ - 'start', - 'center', - 'end', - ]), - /** - * Aligns text vertically within the TextInput. - * @platform android - */ - textAlignVertical: PropTypes.oneOf([ - 'top', - 'center', - 'bottom', - ]), /** * If false, text is not editable. The default value is true. */ @@ -513,8 +495,6 @@ var TextInput = React.createClass({ style={[this.props.style]} autoCapitalize={autoCapitalize} autoCorrect={this.props.autoCorrect} - textAlign={this.props.textAlign} - textAlignVertical={this.props.textAlignVertical} keyboardType={this.props.keyboardType} mostRecentEventCount={this.state.mostRecentEventCount} multiline={this.props.multiline} diff --git a/Libraries/Text/TextStylePropTypes.js b/Libraries/Text/TextStylePropTypes.js index cbd6249360f96f..829f4f48fdee9c 100644 --- a/Libraries/Text/TextStylePropTypes.js +++ b/Libraries/Text/TextStylePropTypes.js @@ -40,6 +40,12 @@ var TextStylePropTypes = Object.assign(Object.create(ViewStylePropTypes), { textAlign: ReactPropTypes.oneOf( ['auto' /*default*/, 'left', 'right', 'center', 'justify'] ), + /** + * @platform android + */ + textAlignVertical: ReactPropTypes.oneOf( + ['auto' /*default*/, 'top', 'bottom', 'center'] + ), /** * @platform ios */ diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java index 7e87a8419d854b..33e52fe95b2159 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java @@ -70,6 +70,7 @@ public class ViewProps { public static final String ON = "on"; public static final String RESIZE_MODE = "resizeMode"; public static final String TEXT_ALIGN = "textAlign"; + public static final String TEXT_ALIGN_VERTICAL = "textAlignVertical"; public static final String BORDER_WIDTH = "borderWidth"; public static final String BORDER_LEFT_WIDTH = "borderLeftWidth"; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 09f9feac61c78e..0a18a42b4a15eb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -11,8 +11,7 @@ import javax.annotation.Nullable; -import java.util.Map; -import java.util.HashMap; +import java.util.Map; import android.graphics.PorterDuff; import android.os.SystemClock; @@ -61,24 +60,6 @@ public class ReactTextInputManager extends private static final String KEYBOARD_TYPE_NUMERIC = "numeric"; private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0]; - private static final Map> TEXT_ALIGN_CONSTANTS; - static { - TEXT_ALIGN_CONSTANTS = MapBuilder.of( - ViewProps.TEXT_ALIGN, - MapBuilder.of( - "left", Gravity.LEFT, - "right", Gravity.RIGHT, - "auto", Gravity.NO_GRAVITY, - "start", Gravity.START, - "center", Gravity.CENTER_HORIZONTAL, - "end", Gravity.END), - "textAlignVertical", - MapBuilder.of( - "top", Gravity.TOP, - "center", Gravity.CENTER_VERTICAL, - "bottom", Gravity.BOTTOM)); - } - @Override public String getName() { return REACT_CLASS; @@ -211,16 +192,32 @@ public void setUnderlineColor(ReactEditText view, @Nullable Integer underlineCol @ReactProp(name = ViewProps.TEXT_ALIGN) public void setTextAlign(ReactEditText view, @Nullable String textAlign) { - Map constants = TEXT_ALIGN_CONSTANTS.get(ViewProps.TEXT_ALIGN); - int gravity = constants.get(textAlign); - view.setGravityHorizontal(gravity); + if (textAlign == null || "auto".equals(textAlign)) { + view.setGravityHorizontal(Gravity.NO_GRAVITY); + } else if ("left".equals(textAlign)) { + view.setGravityHorizontal(Gravity.LEFT); + } else if ("right".equals(textAlign)) { + view.setGravityHorizontal(Gravity.RIGHT); + } else if ("center".equals(textAlign)) { + view.setGravityHorizontal(Gravity.CENTER_HORIZONTAL); + } else { + throw new JSApplicationIllegalArgumentException("Invalid textAlign: " + textAlign); + } } - @ReactProp(name = "textAlignVertical") + @ReactProp(name = ViewProps.TEXT_ALIGN_VERTICAL) public void setTextAlignVertical(ReactEditText view, @Nullable String textAlignVertical) { - Map constants = TEXT_ALIGN_CONSTANTS.get("textAlignVertical"); - int gravity = constants.get(textAlignVertical); - view.setGravityVertical(gravity); + if (textAlignVertical == null || "auto".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.NO_GRAVITY); + } else if ("top".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.TOP); + } else if ("bottom".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.BOTTOM); + } else if ("center".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.CENTER_VERTICAL); + } else { + throw new JSApplicationIllegalArgumentException("Invalid textAlignVertical: " + textAlignVertical); + } } @ReactProp(name = "editable", defaultBoolean = true) From a9068cd9289d27f2c8f992bf5e8351bfb296784b Mon Sep 17 00:00:00 2001 From: Huang Yu Date: Wed, 25 Nov 2015 20:54:31 -0800 Subject: [PATCH 3/4] Fix StyleSheet 'textAlign' for AndroidTextInput change `setTextAlign` and `setTextAlignVertical` to receive argument of type `String`, so that native props and stylesheet props are calling the same @ReactMethod - add demo (may not be necessary) --- .../UIExplorer/TextInputExample.android.js | 40 +++++++++++++++++++ Libraries/Components/TextInput/TextInput.js | 5 +-- .../textinput/ReactTextInputManager.java | 33 +++++++++++++-- 3 files changed, 71 insertions(+), 7 deletions(-) diff --git a/Examples/UIExplorer/TextInputExample.android.js b/Examples/UIExplorer/TextInputExample.android.js index 31156b50d5f861..415b0236436cbf 100644 --- a/Examples/UIExplorer/TextInputExample.android.js +++ b/Examples/UIExplorer/TextInputExample.android.js @@ -313,6 +313,46 @@ exports.examples = [ ); } }, + { + title: 'Text input, Alignment (Horizontal Demo Only)', + render: function() { + return ( + + + + + + + + + + ); + } + }, { title: 'Passwords', render: function() { diff --git a/Libraries/Components/TextInput/TextInput.js b/Libraries/Components/TextInput/TextInput.js index 8d69fd58955468..efc23192ac0af8 100644 --- a/Libraries/Components/TextInput/TextInput.js +++ b/Libraries/Components/TextInput/TextInput.js @@ -494,7 +494,6 @@ var TextInput = React.createClass({ var textAlign = UIManager.AndroidTextInput.Constants.TextAlign[this.props.textAlign]; var textAlignVertical = UIManager.AndroidTextInput.Constants.TextAlignVertical[this.props.textAlignVertical]; - var children = this.props.children; var childCount = 0; ReactChildren.forEach(children, () => ++childCount); @@ -512,8 +511,8 @@ var TextInput = React.createClass({ style={[this.props.style]} autoCapitalize={autoCapitalize} autoCorrect={this.props.autoCorrect} - textAlign={textAlign} - textAlignVertical={textAlignVertical} + textAlign={this.props.textAlign} + textAlignVertical={this.props.textAlignVertical} keyboardType={this.props.keyboardType} mostRecentEventCount={0} multiline={this.props.multiline} diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 9184c661763ef2..8a6385b8ca2837 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -11,7 +11,8 @@ import javax.annotation.Nullable; -import java.util.Map; +import java.util.Map; +import java.util.HashMap; import android.graphics.PorterDuff; import android.os.SystemClock; @@ -28,6 +29,8 @@ import android.widget.TextView; import com.facebook.infer.annotation.Assertions; +import com.facebook.react.bridge.JSApplicationCausedNativeException; +import com.facebook.react.bridge.JSApplicationIllegalArgumentException; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.MapBuilder; @@ -62,6 +65,24 @@ public class ReactTextInputManager extends private static final String KEYBOARD_TYPE_NUMERIC = "numeric"; private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0]; + private static final Map> TEXT_ALIGN_CONSTANTS; + static { + TEXT_ALIGN_CONSTANTS = MapBuilder.of( + ViewProps.TEXT_ALIGN, + MapBuilder.of( + "left", Gravity.LEFT, + "right", Gravity.RIGHT, + "auto", Gravity.NO_GRAVITY, + "start", Gravity.START, + "center", Gravity.CENTER_HORIZONTAL, + "end", Gravity.END), + "textAlignVertical", + MapBuilder.of( + "top", Gravity.TOP, + "center", Gravity.CENTER_VERTICAL, + "bottom", Gravity.BOTTOM)); + } + @Override public String getName() { return REACT_CLASS; @@ -201,13 +222,17 @@ public void setUnderlineColor(ReactEditText view, @Nullable Integer underlineCol } } - @ReactProp(name = "textAlign") - public void setTextAlign(ReactEditText view, int gravity) { + @ReactProp(name = ViewProps.TEXT_ALIGN) + public void setTextAlign(ReactEditText view, @Nullable String textAlign) { + Map constants = TEXT_ALIGN_CONSTANTS.get(ViewProps.TEXT_ALIGN); + int gravity = constants.get(textAlign); view.setGravityHorizontal(gravity); } @ReactProp(name = "textAlignVertical") - public void setTextAlignVertical(ReactEditText view, int gravity) { + public void setTextAlignVertical(ReactEditText view, @Nullable String textAlignVertical) { + Map constants = TEXT_ALIGN_CONSTANTS.get("textAlignVertical"); + int gravity = constants.get(textAlignVertical); view.setGravityVertical(gravity); } From 7e26860e3efa46ec2e32376627aaf16b622707da Mon Sep 17 00:00:00 2001 From: Huang Yu Date: Sat, 5 Dec 2015 10:17:42 -0800 Subject: [PATCH 4/4] remove duplicate examples of textAlign prop remove textAlign and textAlignVertical from Android native props add textAlignVertical as Text Style Prop (Android only) add TEXT_ALIGN_VERTICAL as a view prop constant --- .../UIExplorer/TextInputExample.android.js | 52 ++----------------- Libraries/Components/TextInput/TextInput.js | 20 ------- Libraries/Text/TextStylePropTypes.js | 6 +++ .../facebook/react/uimanager/ViewProps.java | 1 + .../textinput/ReactTextInputManager.java | 51 +++++++++--------- 5 files changed, 34 insertions(+), 96 deletions(-) diff --git a/Examples/UIExplorer/TextInputExample.android.js b/Examples/UIExplorer/TextInputExample.android.js index 415b0236436cbf..1d0f67ef536eb4 100644 --- a/Examples/UIExplorer/TextInputExample.android.js +++ b/Examples/UIExplorer/TextInputExample.android.js @@ -313,46 +313,6 @@ exports.examples = [ ); } }, - { - title: 'Text input, Alignment (Horizontal Demo Only)', - render: function() { - return ( - - - - - - - - - - ); - } - }, { title: 'Passwords', render: function() { @@ -387,25 +347,19 @@ exports.examples = [ placeholder="multiline, aligned top-left" placeholderTextColor="red" multiline={true} - textAlign="start" - textAlignVertical="top" - style={styles.multiline} + style={[styles.multiline, {textAlign: "left", textAlignVertical: "top"}]} /> + style={[styles.multiline, {color: 'blue'}, {textAlign: "right", textAlignVertical: "bottom"}]}> multiline with children, aligned bottom-right diff --git a/Libraries/Components/TextInput/TextInput.js b/Libraries/Components/TextInput/TextInput.js index efc23192ac0af8..33ba847e6b3543 100644 --- a/Libraries/Components/TextInput/TextInput.js +++ b/Libraries/Components/TextInput/TextInput.js @@ -101,24 +101,6 @@ var TextInput = React.createClass({ * The default value is false. */ autoFocus: PropTypes.bool, - /** - * Set the position of the cursor from where editing will begin. - * @platform android - */ - textAlign: PropTypes.oneOf([ - 'start', - 'center', - 'end', - ]), - /** - * Aligns text vertically within the TextInput. - * @platform android - */ - textAlignVertical: PropTypes.oneOf([ - 'top', - 'center', - 'bottom', - ]), /** * If false, text is not editable. The default value is true. */ @@ -511,8 +493,6 @@ var TextInput = React.createClass({ style={[this.props.style]} autoCapitalize={autoCapitalize} autoCorrect={this.props.autoCorrect} - textAlign={this.props.textAlign} - textAlignVertical={this.props.textAlignVertical} keyboardType={this.props.keyboardType} mostRecentEventCount={0} multiline={this.props.multiline} diff --git a/Libraries/Text/TextStylePropTypes.js b/Libraries/Text/TextStylePropTypes.js index edcf428396c71a..f2c2411cd414ae 100644 --- a/Libraries/Text/TextStylePropTypes.js +++ b/Libraries/Text/TextStylePropTypes.js @@ -46,6 +46,12 @@ var TextStylePropTypes = Object.assign(Object.create(ViewStylePropTypes), { textAlign: ReactPropTypes.oneOf( ['auto' /*default*/, 'left', 'right', 'center', 'justify'] ), + /** + * @platform android + */ + textAlignVertical: ReactPropTypes.oneOf( + ['auto' /*default*/, 'top', 'bottom', 'center'] + ), /** * @platform ios */ diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java index 7e87a8419d854b..33e52fe95b2159 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.java @@ -70,6 +70,7 @@ public class ViewProps { public static final String ON = "on"; public static final String RESIZE_MODE = "resizeMode"; public static final String TEXT_ALIGN = "textAlign"; + public static final String TEXT_ALIGN_VERTICAL = "textAlignVertical"; public static final String BORDER_WIDTH = "borderWidth"; public static final String BORDER_LEFT_WIDTH = "borderLeftWidth"; diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java index 8a6385b8ca2837..1535c70ca7ad75 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java @@ -11,8 +11,7 @@ import javax.annotation.Nullable; -import java.util.Map; -import java.util.HashMap; +import java.util.Map; import android.graphics.PorterDuff; import android.os.SystemClock; @@ -65,24 +64,6 @@ public class ReactTextInputManager extends private static final String KEYBOARD_TYPE_NUMERIC = "numeric"; private static final InputFilter[] EMPTY_FILTERS = new InputFilter[0]; - private static final Map> TEXT_ALIGN_CONSTANTS; - static { - TEXT_ALIGN_CONSTANTS = MapBuilder.of( - ViewProps.TEXT_ALIGN, - MapBuilder.of( - "left", Gravity.LEFT, - "right", Gravity.RIGHT, - "auto", Gravity.NO_GRAVITY, - "start", Gravity.START, - "center", Gravity.CENTER_HORIZONTAL, - "end", Gravity.END), - "textAlignVertical", - MapBuilder.of( - "top", Gravity.TOP, - "center", Gravity.CENTER_VERTICAL, - "bottom", Gravity.BOTTOM)); - } - @Override public String getName() { return REACT_CLASS; @@ -224,16 +205,32 @@ public void setUnderlineColor(ReactEditText view, @Nullable Integer underlineCol @ReactProp(name = ViewProps.TEXT_ALIGN) public void setTextAlign(ReactEditText view, @Nullable String textAlign) { - Map constants = TEXT_ALIGN_CONSTANTS.get(ViewProps.TEXT_ALIGN); - int gravity = constants.get(textAlign); - view.setGravityHorizontal(gravity); + if (textAlign == null || "auto".equals(textAlign)) { + view.setGravityHorizontal(Gravity.NO_GRAVITY); + } else if ("left".equals(textAlign)) { + view.setGravityHorizontal(Gravity.LEFT); + } else if ("right".equals(textAlign)) { + view.setGravityHorizontal(Gravity.RIGHT); + } else if ("center".equals(textAlign)) { + view.setGravityHorizontal(Gravity.CENTER_HORIZONTAL); + } else { + throw new JSApplicationIllegalArgumentException("Invalid textAlign: " + textAlign); + } } - @ReactProp(name = "textAlignVertical") + @ReactProp(name = ViewProps.TEXT_ALIGN_VERTICAL) public void setTextAlignVertical(ReactEditText view, @Nullable String textAlignVertical) { - Map constants = TEXT_ALIGN_CONSTANTS.get("textAlignVertical"); - int gravity = constants.get(textAlignVertical); - view.setGravityVertical(gravity); + if (textAlignVertical == null || "auto".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.NO_GRAVITY); + } else if ("top".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.TOP); + } else if ("bottom".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.BOTTOM); + } else if ("center".equals(textAlignVertical)) { + view.setGravityVertical(Gravity.CENTER_VERTICAL); + } else { + throw new JSApplicationIllegalArgumentException("Invalid textAlignVertical: " + textAlignVertical); + } } @ReactProp(name = "editable", defaultBoolean = true)