TextInput placing an automatic “highlight” behind text react native












1














I've found this weird behavior in IOS (both on the simulator and on a real device, but I only have screenshots from the simulator) where on input to the TextInput component, it puts a weird highlight behind the text you input. I've referenced this (since closed) issue: https://github.com/facebook/react-native/issues/7070



And I've scoured the docs (https://facebook.github.io/react-native/docs/textinput) for an answer to this, but can't quite seem to come up with any answers. I thought I was close with the selectTextOnFocus prop, but I set that to false and nothing changed (the behavior remained).



I have also tried setting textDecorationColor and textShadowColor to transparent, to no avail. I am really at a loss of what to do right now.



Here is the code I have for the input:



import React from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';

export class GeneralInput extends React.Component {

constructor(props) {
super(props);
this.state = {
placeholder: this.props.placeholder,
inputValue: "",
inputting: false,
};
}
whenInputIsFocused() {
this.setState({placeholder: ""});
}
whenInputIsBlurred() {
if (this.state.inputValue === "") {
this.setState({placeholder: this.props.placeholder});
}
}
focusNextField(nextField) { this.refs[nextField].focus(); }

render() {
const autoFocus = this.props.autoFocus == 'true';
const multiline = this.props.multiline == 'true';
return(
<View style={styles.outerContainer}>
<Text style={styles.labelText}>{this.props.labelText}</Text>
<TextInput
autoCapitalize='none'
autoFocus={autoFocus}
onChangeText={(inputValue) => this.setState({inputValue})}
value={this.state.inputValue}
secureTextEntry={this.props.secureTextEntry}
onBlur={this.whenInputIsBlurred.bind(this)}
onFocus={this.whenInputIsFocused.bind(this)}
underlineColorAndroid="transparent"
keyboardType={this.props.type}
returnKeyType={this.props.returnKeyType}
placeholder={this.state.placeholder}
placeholderTextColor='rgba(255, 255, 255, 0.3)'
multiline={multiline}
selectTextOnFocus={false}
onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
style={styles.inputStyles} />
</View>
);
}
}

const styles = StyleSheet.create({
outerContainer: {
justifyContent: 'center',
alignItems: 'flex-start',
width: '90%',
marginBottom: 20,
},
labelText: {
fontFamily: 'rubik-bold',
fontSize: 14,
fontWeight: 'bold',
color: '#fff',
marginBottom: 5,
},
inputStyles: {
height: 40,
borderRadius: 2,
backgroundColor: 'rgba(255, 255, 255, 0.3);',
shadowColor: 'rgba(0, 0, 0, 0.15)',
shadowOffset: {width: 0,height: 2},
shadowOpacity: 0,
shadowRadius: 0,
width: '100%',
textDecorationColor: 'transparent',
fontSize: 14,
color: '#fff',
paddingLeft: 15,
fontFamily: 'rubik-bold',
},
});


And here are the screenshots of what is actually happening (the first screenshot is with the highlight, the second is just the input with the placeholder text for reference):
enter image description here



enter image description here



So the question is...how do I make that weird highlight go away on ios?










share|improve this question






















  • can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
    – Siraj
    Nov 19 '18 at 18:24










  • @Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
    – Adam McGurk
    Nov 19 '18 at 21:00
















1














I've found this weird behavior in IOS (both on the simulator and on a real device, but I only have screenshots from the simulator) where on input to the TextInput component, it puts a weird highlight behind the text you input. I've referenced this (since closed) issue: https://github.com/facebook/react-native/issues/7070



And I've scoured the docs (https://facebook.github.io/react-native/docs/textinput) for an answer to this, but can't quite seem to come up with any answers. I thought I was close with the selectTextOnFocus prop, but I set that to false and nothing changed (the behavior remained).



I have also tried setting textDecorationColor and textShadowColor to transparent, to no avail. I am really at a loss of what to do right now.



Here is the code I have for the input:



import React from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';

export class GeneralInput extends React.Component {

constructor(props) {
super(props);
this.state = {
placeholder: this.props.placeholder,
inputValue: "",
inputting: false,
};
}
whenInputIsFocused() {
this.setState({placeholder: ""});
}
whenInputIsBlurred() {
if (this.state.inputValue === "") {
this.setState({placeholder: this.props.placeholder});
}
}
focusNextField(nextField) { this.refs[nextField].focus(); }

render() {
const autoFocus = this.props.autoFocus == 'true';
const multiline = this.props.multiline == 'true';
return(
<View style={styles.outerContainer}>
<Text style={styles.labelText}>{this.props.labelText}</Text>
<TextInput
autoCapitalize='none'
autoFocus={autoFocus}
onChangeText={(inputValue) => this.setState({inputValue})}
value={this.state.inputValue}
secureTextEntry={this.props.secureTextEntry}
onBlur={this.whenInputIsBlurred.bind(this)}
onFocus={this.whenInputIsFocused.bind(this)}
underlineColorAndroid="transparent"
keyboardType={this.props.type}
returnKeyType={this.props.returnKeyType}
placeholder={this.state.placeholder}
placeholderTextColor='rgba(255, 255, 255, 0.3)'
multiline={multiline}
selectTextOnFocus={false}
onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
style={styles.inputStyles} />
</View>
);
}
}

const styles = StyleSheet.create({
outerContainer: {
justifyContent: 'center',
alignItems: 'flex-start',
width: '90%',
marginBottom: 20,
},
labelText: {
fontFamily: 'rubik-bold',
fontSize: 14,
fontWeight: 'bold',
color: '#fff',
marginBottom: 5,
},
inputStyles: {
height: 40,
borderRadius: 2,
backgroundColor: 'rgba(255, 255, 255, 0.3);',
shadowColor: 'rgba(0, 0, 0, 0.15)',
shadowOffset: {width: 0,height: 2},
shadowOpacity: 0,
shadowRadius: 0,
width: '100%',
textDecorationColor: 'transparent',
fontSize: 14,
color: '#fff',
paddingLeft: 15,
fontFamily: 'rubik-bold',
},
});


And here are the screenshots of what is actually happening (the first screenshot is with the highlight, the second is just the input with the placeholder text for reference):
enter image description here



enter image description here



So the question is...how do I make that weird highlight go away on ios?










share|improve this question






















  • can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
    – Siraj
    Nov 19 '18 at 18:24










  • @Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
    – Adam McGurk
    Nov 19 '18 at 21:00














1












1








1







I've found this weird behavior in IOS (both on the simulator and on a real device, but I only have screenshots from the simulator) where on input to the TextInput component, it puts a weird highlight behind the text you input. I've referenced this (since closed) issue: https://github.com/facebook/react-native/issues/7070



And I've scoured the docs (https://facebook.github.io/react-native/docs/textinput) for an answer to this, but can't quite seem to come up with any answers. I thought I was close with the selectTextOnFocus prop, but I set that to false and nothing changed (the behavior remained).



I have also tried setting textDecorationColor and textShadowColor to transparent, to no avail. I am really at a loss of what to do right now.



Here is the code I have for the input:



import React from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';

export class GeneralInput extends React.Component {

constructor(props) {
super(props);
this.state = {
placeholder: this.props.placeholder,
inputValue: "",
inputting: false,
};
}
whenInputIsFocused() {
this.setState({placeholder: ""});
}
whenInputIsBlurred() {
if (this.state.inputValue === "") {
this.setState({placeholder: this.props.placeholder});
}
}
focusNextField(nextField) { this.refs[nextField].focus(); }

render() {
const autoFocus = this.props.autoFocus == 'true';
const multiline = this.props.multiline == 'true';
return(
<View style={styles.outerContainer}>
<Text style={styles.labelText}>{this.props.labelText}</Text>
<TextInput
autoCapitalize='none'
autoFocus={autoFocus}
onChangeText={(inputValue) => this.setState({inputValue})}
value={this.state.inputValue}
secureTextEntry={this.props.secureTextEntry}
onBlur={this.whenInputIsBlurred.bind(this)}
onFocus={this.whenInputIsFocused.bind(this)}
underlineColorAndroid="transparent"
keyboardType={this.props.type}
returnKeyType={this.props.returnKeyType}
placeholder={this.state.placeholder}
placeholderTextColor='rgba(255, 255, 255, 0.3)'
multiline={multiline}
selectTextOnFocus={false}
onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
style={styles.inputStyles} />
</View>
);
}
}

const styles = StyleSheet.create({
outerContainer: {
justifyContent: 'center',
alignItems: 'flex-start',
width: '90%',
marginBottom: 20,
},
labelText: {
fontFamily: 'rubik-bold',
fontSize: 14,
fontWeight: 'bold',
color: '#fff',
marginBottom: 5,
},
inputStyles: {
height: 40,
borderRadius: 2,
backgroundColor: 'rgba(255, 255, 255, 0.3);',
shadowColor: 'rgba(0, 0, 0, 0.15)',
shadowOffset: {width: 0,height: 2},
shadowOpacity: 0,
shadowRadius: 0,
width: '100%',
textDecorationColor: 'transparent',
fontSize: 14,
color: '#fff',
paddingLeft: 15,
fontFamily: 'rubik-bold',
},
});


And here are the screenshots of what is actually happening (the first screenshot is with the highlight, the second is just the input with the placeholder text for reference):
enter image description here



enter image description here



So the question is...how do I make that weird highlight go away on ios?










share|improve this question













I've found this weird behavior in IOS (both on the simulator and on a real device, but I only have screenshots from the simulator) where on input to the TextInput component, it puts a weird highlight behind the text you input. I've referenced this (since closed) issue: https://github.com/facebook/react-native/issues/7070



And I've scoured the docs (https://facebook.github.io/react-native/docs/textinput) for an answer to this, but can't quite seem to come up with any answers. I thought I was close with the selectTextOnFocus prop, but I set that to false and nothing changed (the behavior remained).



I have also tried setting textDecorationColor and textShadowColor to transparent, to no avail. I am really at a loss of what to do right now.



Here is the code I have for the input:



import React from 'react';
import { View, Text, TextInput, StyleSheet } from 'react-native';

export class GeneralInput extends React.Component {

constructor(props) {
super(props);
this.state = {
placeholder: this.props.placeholder,
inputValue: "",
inputting: false,
};
}
whenInputIsFocused() {
this.setState({placeholder: ""});
}
whenInputIsBlurred() {
if (this.state.inputValue === "") {
this.setState({placeholder: this.props.placeholder});
}
}
focusNextField(nextField) { this.refs[nextField].focus(); }

render() {
const autoFocus = this.props.autoFocus == 'true';
const multiline = this.props.multiline == 'true';
return(
<View style={styles.outerContainer}>
<Text style={styles.labelText}>{this.props.labelText}</Text>
<TextInput
autoCapitalize='none'
autoFocus={autoFocus}
onChangeText={(inputValue) => this.setState({inputValue})}
value={this.state.inputValue}
secureTextEntry={this.props.secureTextEntry}
onBlur={this.whenInputIsBlurred.bind(this)}
onFocus={this.whenInputIsFocused.bind(this)}
underlineColorAndroid="transparent"
keyboardType={this.props.type}
returnKeyType={this.props.returnKeyType}
placeholder={this.state.placeholder}
placeholderTextColor='rgba(255, 255, 255, 0.3)'
multiline={multiline}
selectTextOnFocus={false}
onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
style={styles.inputStyles} />
</View>
);
}
}

const styles = StyleSheet.create({
outerContainer: {
justifyContent: 'center',
alignItems: 'flex-start',
width: '90%',
marginBottom: 20,
},
labelText: {
fontFamily: 'rubik-bold',
fontSize: 14,
fontWeight: 'bold',
color: '#fff',
marginBottom: 5,
},
inputStyles: {
height: 40,
borderRadius: 2,
backgroundColor: 'rgba(255, 255, 255, 0.3);',
shadowColor: 'rgba(0, 0, 0, 0.15)',
shadowOffset: {width: 0,height: 2},
shadowOpacity: 0,
shadowRadius: 0,
width: '100%',
textDecorationColor: 'transparent',
fontSize: 14,
color: '#fff',
paddingLeft: 15,
fontFamily: 'rubik-bold',
},
});


And here are the screenshots of what is actually happening (the first screenshot is with the highlight, the second is just the input with the placeholder text for reference):
enter image description here



enter image description here



So the question is...how do I make that weird highlight go away on ios?







javascript react-native






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 19 '18 at 16:58









Adam McGurk

367219




367219












  • can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
    – Siraj
    Nov 19 '18 at 18:24










  • @Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
    – Adam McGurk
    Nov 19 '18 at 21:00


















  • can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
    – Siraj
    Nov 19 '18 at 18:24










  • @Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
    – Adam McGurk
    Nov 19 '18 at 21:00
















can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
– Siraj
Nov 19 '18 at 18:24




can you please try again just by removing the style from <TextInput />. It may be the background color you have given in the styling tag
– Siraj
Nov 19 '18 at 18:24












@Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
– Adam McGurk
Nov 19 '18 at 21:00




@Siraj You were right, it was the background color, below is what I did to fix the problem. I'll post my answer, but if you want to post yours, I'll give you the answer!
– Adam McGurk
Nov 19 '18 at 21:00












2 Answers
2






active

oldest

votes


















1














Text is not getting selected, it is just the background color you have given in the style.




Just remove the background color from the style of the <TextInput />







share|improve this answer





























    0














    So, as per @Siraj the reason this odd behavior was happening was because the background color I had applied to the <TextInput /> component was also being applied to the text being inputed. So, I wrapped the <TextInput /> in a <View />, applied the height, width, backgroundColor, shadow, and borderRadius props to the surrounding <View />, and it has the desired effect! See the code below:



    import React from 'react';
    import { View, Text, TextInput, StyleSheet } from 'react-native';

    export class GeneralInput extends React.Component {

    constructor(props) {
    super(props);
    this.state = {
    placeholder: this.props.placeholder,
    inputValue: "",
    inputting: false,
    };
    }
    whenInputIsFocused() {
    this.setState({placeholder: ""});
    }
    whenInputIsBlurred() {
    if (this.state.inputValue === "") {
    this.setState({placeholder: this.props.placeholder});
    }
    }
    focusNextField(nextField) { this.refs[nextField].focus(); }

    render() {
    const autoFocus = this.props.autoFocus == 'true';
    const multiline = this.props.multiline == 'true';
    return(
    <View style={styles.outerContainer}>
    <Text style={styles.labelText}>{this.props.labelText}</Text>
    <View style={styles.inputContainer}> // added View
    <TextInput
    autoCapitalize='none'
    autoFocus={autoFocus}
    onChangeText={(inputValue) => this.setState({inputValue})}
    value={this.state.inputValue}
    secureTextEntry={this.props.secureTextEntry}
    onBlur={this.whenInputIsBlurred.bind(this)}
    onFocus={this.whenInputIsFocused.bind(this)}
    underlineColorAndroid="transparent"
    keyboardType={this.props.type}
    returnKeyType={this.props.returnKeyType}
    placeholder={this.state.placeholder}
    placeholderTextColor='rgba(255, 255, 255, 0.3)'
    multiline={multiline}
    selectTextOnFocus={false}
    onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
    blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
    style={styles.inputStyles} />
    </View> // Closing the added View
    </View>
    );
    }
    }

    const styles = StyleSheet.create({
    outerContainer: {
    justifyContent: 'center',
    alignItems: 'flex-start',
    width: '90%',
    marginBottom: 20,
    },
    labelText: {
    fontFamily: 'rubik-bold',
    fontSize: 14,
    fontWeight: 'bold',
    color: '#fff',
    marginBottom: 5,
    },
    inputContainer: { // added styles
    height: 40,
    width: '100%',
    backgroundColor: 'rgba(255, 255, 255, 0.3);',
    shadowColor: 'rgba(0, 0, 0, 0.15)',
    shadowOffset: {width: 0,height: 2},
    shadowOpacity: 0,
    shadowRadius: 0,
    borderRadius: 2,
    },
    inputStyles: {
    height: '100%',
    width: '100%',
    fontSize: 14,
    color: '#fff',
    paddingLeft: 15,
    fontFamily: 'rubik-bold',
    },
    });





    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53379387%2ftextinput-placing-an-automatic-highlight-behind-text-react-native%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      1














      Text is not getting selected, it is just the background color you have given in the style.




      Just remove the background color from the style of the <TextInput />







      share|improve this answer


























        1














        Text is not getting selected, it is just the background color you have given in the style.




        Just remove the background color from the style of the <TextInput />







        share|improve this answer
























          1












          1








          1






          Text is not getting selected, it is just the background color you have given in the style.




          Just remove the background color from the style of the <TextInput />







          share|improve this answer












          Text is not getting selected, it is just the background color you have given in the style.




          Just remove the background color from the style of the <TextInput />








          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 '18 at 5:43









          Siraj

          1,57311631




          1,57311631

























              0














              So, as per @Siraj the reason this odd behavior was happening was because the background color I had applied to the <TextInput /> component was also being applied to the text being inputed. So, I wrapped the <TextInput /> in a <View />, applied the height, width, backgroundColor, shadow, and borderRadius props to the surrounding <View />, and it has the desired effect! See the code below:



              import React from 'react';
              import { View, Text, TextInput, StyleSheet } from 'react-native';

              export class GeneralInput extends React.Component {

              constructor(props) {
              super(props);
              this.state = {
              placeholder: this.props.placeholder,
              inputValue: "",
              inputting: false,
              };
              }
              whenInputIsFocused() {
              this.setState({placeholder: ""});
              }
              whenInputIsBlurred() {
              if (this.state.inputValue === "") {
              this.setState({placeholder: this.props.placeholder});
              }
              }
              focusNextField(nextField) { this.refs[nextField].focus(); }

              render() {
              const autoFocus = this.props.autoFocus == 'true';
              const multiline = this.props.multiline == 'true';
              return(
              <View style={styles.outerContainer}>
              <Text style={styles.labelText}>{this.props.labelText}</Text>
              <View style={styles.inputContainer}> // added View
              <TextInput
              autoCapitalize='none'
              autoFocus={autoFocus}
              onChangeText={(inputValue) => this.setState({inputValue})}
              value={this.state.inputValue}
              secureTextEntry={this.props.secureTextEntry}
              onBlur={this.whenInputIsBlurred.bind(this)}
              onFocus={this.whenInputIsFocused.bind(this)}
              underlineColorAndroid="transparent"
              keyboardType={this.props.type}
              returnKeyType={this.props.returnKeyType}
              placeholder={this.state.placeholder}
              placeholderTextColor='rgba(255, 255, 255, 0.3)'
              multiline={multiline}
              selectTextOnFocus={false}
              onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
              blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
              style={styles.inputStyles} />
              </View> // Closing the added View
              </View>
              );
              }
              }

              const styles = StyleSheet.create({
              outerContainer: {
              justifyContent: 'center',
              alignItems: 'flex-start',
              width: '90%',
              marginBottom: 20,
              },
              labelText: {
              fontFamily: 'rubik-bold',
              fontSize: 14,
              fontWeight: 'bold',
              color: '#fff',
              marginBottom: 5,
              },
              inputContainer: { // added styles
              height: 40,
              width: '100%',
              backgroundColor: 'rgba(255, 255, 255, 0.3);',
              shadowColor: 'rgba(0, 0, 0, 0.15)',
              shadowOffset: {width: 0,height: 2},
              shadowOpacity: 0,
              shadowRadius: 0,
              borderRadius: 2,
              },
              inputStyles: {
              height: '100%',
              width: '100%',
              fontSize: 14,
              color: '#fff',
              paddingLeft: 15,
              fontFamily: 'rubik-bold',
              },
              });





              share|improve this answer


























                0














                So, as per @Siraj the reason this odd behavior was happening was because the background color I had applied to the <TextInput /> component was also being applied to the text being inputed. So, I wrapped the <TextInput /> in a <View />, applied the height, width, backgroundColor, shadow, and borderRadius props to the surrounding <View />, and it has the desired effect! See the code below:



                import React from 'react';
                import { View, Text, TextInput, StyleSheet } from 'react-native';

                export class GeneralInput extends React.Component {

                constructor(props) {
                super(props);
                this.state = {
                placeholder: this.props.placeholder,
                inputValue: "",
                inputting: false,
                };
                }
                whenInputIsFocused() {
                this.setState({placeholder: ""});
                }
                whenInputIsBlurred() {
                if (this.state.inputValue === "") {
                this.setState({placeholder: this.props.placeholder});
                }
                }
                focusNextField(nextField) { this.refs[nextField].focus(); }

                render() {
                const autoFocus = this.props.autoFocus == 'true';
                const multiline = this.props.multiline == 'true';
                return(
                <View style={styles.outerContainer}>
                <Text style={styles.labelText}>{this.props.labelText}</Text>
                <View style={styles.inputContainer}> // added View
                <TextInput
                autoCapitalize='none'
                autoFocus={autoFocus}
                onChangeText={(inputValue) => this.setState({inputValue})}
                value={this.state.inputValue}
                secureTextEntry={this.props.secureTextEntry}
                onBlur={this.whenInputIsBlurred.bind(this)}
                onFocus={this.whenInputIsFocused.bind(this)}
                underlineColorAndroid="transparent"
                keyboardType={this.props.type}
                returnKeyType={this.props.returnKeyType}
                placeholder={this.state.placeholder}
                placeholderTextColor='rgba(255, 255, 255, 0.3)'
                multiline={multiline}
                selectTextOnFocus={false}
                onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
                blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
                style={styles.inputStyles} />
                </View> // Closing the added View
                </View>
                );
                }
                }

                const styles = StyleSheet.create({
                outerContainer: {
                justifyContent: 'center',
                alignItems: 'flex-start',
                width: '90%',
                marginBottom: 20,
                },
                labelText: {
                fontFamily: 'rubik-bold',
                fontSize: 14,
                fontWeight: 'bold',
                color: '#fff',
                marginBottom: 5,
                },
                inputContainer: { // added styles
                height: 40,
                width: '100%',
                backgroundColor: 'rgba(255, 255, 255, 0.3);',
                shadowColor: 'rgba(0, 0, 0, 0.15)',
                shadowOffset: {width: 0,height: 2},
                shadowOpacity: 0,
                shadowRadius: 0,
                borderRadius: 2,
                },
                inputStyles: {
                height: '100%',
                width: '100%',
                fontSize: 14,
                color: '#fff',
                paddingLeft: 15,
                fontFamily: 'rubik-bold',
                },
                });





                share|improve this answer
























                  0












                  0








                  0






                  So, as per @Siraj the reason this odd behavior was happening was because the background color I had applied to the <TextInput /> component was also being applied to the text being inputed. So, I wrapped the <TextInput /> in a <View />, applied the height, width, backgroundColor, shadow, and borderRadius props to the surrounding <View />, and it has the desired effect! See the code below:



                  import React from 'react';
                  import { View, Text, TextInput, StyleSheet } from 'react-native';

                  export class GeneralInput extends React.Component {

                  constructor(props) {
                  super(props);
                  this.state = {
                  placeholder: this.props.placeholder,
                  inputValue: "",
                  inputting: false,
                  };
                  }
                  whenInputIsFocused() {
                  this.setState({placeholder: ""});
                  }
                  whenInputIsBlurred() {
                  if (this.state.inputValue === "") {
                  this.setState({placeholder: this.props.placeholder});
                  }
                  }
                  focusNextField(nextField) { this.refs[nextField].focus(); }

                  render() {
                  const autoFocus = this.props.autoFocus == 'true';
                  const multiline = this.props.multiline == 'true';
                  return(
                  <View style={styles.outerContainer}>
                  <Text style={styles.labelText}>{this.props.labelText}</Text>
                  <View style={styles.inputContainer}> // added View
                  <TextInput
                  autoCapitalize='none'
                  autoFocus={autoFocus}
                  onChangeText={(inputValue) => this.setState({inputValue})}
                  value={this.state.inputValue}
                  secureTextEntry={this.props.secureTextEntry}
                  onBlur={this.whenInputIsBlurred.bind(this)}
                  onFocus={this.whenInputIsFocused.bind(this)}
                  underlineColorAndroid="transparent"
                  keyboardType={this.props.type}
                  returnKeyType={this.props.returnKeyType}
                  placeholder={this.state.placeholder}
                  placeholderTextColor='rgba(255, 255, 255, 0.3)'
                  multiline={multiline}
                  selectTextOnFocus={false}
                  onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
                  blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
                  style={styles.inputStyles} />
                  </View> // Closing the added View
                  </View>
                  );
                  }
                  }

                  const styles = StyleSheet.create({
                  outerContainer: {
                  justifyContent: 'center',
                  alignItems: 'flex-start',
                  width: '90%',
                  marginBottom: 20,
                  },
                  labelText: {
                  fontFamily: 'rubik-bold',
                  fontSize: 14,
                  fontWeight: 'bold',
                  color: '#fff',
                  marginBottom: 5,
                  },
                  inputContainer: { // added styles
                  height: 40,
                  width: '100%',
                  backgroundColor: 'rgba(255, 255, 255, 0.3);',
                  shadowColor: 'rgba(0, 0, 0, 0.15)',
                  shadowOffset: {width: 0,height: 2},
                  shadowOpacity: 0,
                  shadowRadius: 0,
                  borderRadius: 2,
                  },
                  inputStyles: {
                  height: '100%',
                  width: '100%',
                  fontSize: 14,
                  color: '#fff',
                  paddingLeft: 15,
                  fontFamily: 'rubik-bold',
                  },
                  });





                  share|improve this answer












                  So, as per @Siraj the reason this odd behavior was happening was because the background color I had applied to the <TextInput /> component was also being applied to the text being inputed. So, I wrapped the <TextInput /> in a <View />, applied the height, width, backgroundColor, shadow, and borderRadius props to the surrounding <View />, and it has the desired effect! See the code below:



                  import React from 'react';
                  import { View, Text, TextInput, StyleSheet } from 'react-native';

                  export class GeneralInput extends React.Component {

                  constructor(props) {
                  super(props);
                  this.state = {
                  placeholder: this.props.placeholder,
                  inputValue: "",
                  inputting: false,
                  };
                  }
                  whenInputIsFocused() {
                  this.setState({placeholder: ""});
                  }
                  whenInputIsBlurred() {
                  if (this.state.inputValue === "") {
                  this.setState({placeholder: this.props.placeholder});
                  }
                  }
                  focusNextField(nextField) { this.refs[nextField].focus(); }

                  render() {
                  const autoFocus = this.props.autoFocus == 'true';
                  const multiline = this.props.multiline == 'true';
                  return(
                  <View style={styles.outerContainer}>
                  <Text style={styles.labelText}>{this.props.labelText}</Text>
                  <View style={styles.inputContainer}> // added View
                  <TextInput
                  autoCapitalize='none'
                  autoFocus={autoFocus}
                  onChangeText={(inputValue) => this.setState({inputValue})}
                  value={this.state.inputValue}
                  secureTextEntry={this.props.secureTextEntry}
                  onBlur={this.whenInputIsBlurred.bind(this)}
                  onFocus={this.whenInputIsFocused.bind(this)}
                  underlineColorAndroid="transparent"
                  keyboardType={this.props.type}
                  returnKeyType={this.props.returnKeyType}
                  placeholder={this.state.placeholder}
                  placeholderTextColor='rgba(255, 255, 255, 0.3)'
                  multiline={multiline}
                  selectTextOnFocus={false}
                  onSubmitEditing={() => {this.focusNextField(this.props.ref)}}
                  blurOnSubmit={(this.props.moveAlongType === 'next') ? false : true}
                  style={styles.inputStyles} />
                  </View> // Closing the added View
                  </View>
                  );
                  }
                  }

                  const styles = StyleSheet.create({
                  outerContainer: {
                  justifyContent: 'center',
                  alignItems: 'flex-start',
                  width: '90%',
                  marginBottom: 20,
                  },
                  labelText: {
                  fontFamily: 'rubik-bold',
                  fontSize: 14,
                  fontWeight: 'bold',
                  color: '#fff',
                  marginBottom: 5,
                  },
                  inputContainer: { // added styles
                  height: 40,
                  width: '100%',
                  backgroundColor: 'rgba(255, 255, 255, 0.3);',
                  shadowColor: 'rgba(0, 0, 0, 0.15)',
                  shadowOffset: {width: 0,height: 2},
                  shadowOpacity: 0,
                  shadowRadius: 0,
                  borderRadius: 2,
                  },
                  inputStyles: {
                  height: '100%',
                  width: '100%',
                  fontSize: 14,
                  color: '#fff',
                  paddingLeft: 15,
                  fontFamily: 'rubik-bold',
                  },
                  });






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Nov 19 '18 at 21:05









                  Adam McGurk

                  367219




                  367219






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53379387%2ftextinput-placing-an-automatic-highlight-behind-text-react-native%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      MongoDB - Not Authorized To Execute Command

                      How to fix TextFormField cause rebuild widget in Flutter

                      in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith