如何在 React Native 中更改 TextInput 占位符的样式?

Posted

技术标签:

【中文标题】如何在 React Native 中更改 TextInput 占位符的样式?【英文标题】:How to change styling of TextInput placeholder in React Native? 【发布时间】:2016-06-05 12:38:23 【问题描述】:

有没有办法为 React Native 中 TextInput 的placeholder 设置fontStyle: 'italic' only

看here at the documentation好像只能设置占位符和placeholderTextColor。

【问题讨论】:

不。很高兴找到解决方案 好吧..现在我也遇到了同样的问题.. 如果你只需要改变颜色,看that anwser 【参考方案1】:

您可以使用 placeholderTextColor 属性设置占位符颜色。

<TextInput placeholderTextColor='red' />

【讨论】:

这是我一直在寻找的答案,不是这个帖子中原始问题的答案,但仍然..帮助了我! 这应该是公认的答案【参考方案2】:

改进 Daniel 的答案以获得更通用的解决方案

class TextInput2 extends Component 
  constructor(props) 
    super(props);
    this.state =  placeholder: props.value.length == 0 
    this.handleChange = this.handleChange.bind(this);
  
  handleChange(ev) 
    this.setState( placeholder: ev.nativeEvent.text.length == 0 ); 
    this.props.onChange && this.props.onChange(ev); 
  
  render() 
    const  placeholderStyle, style, onChange, ...rest  = this.props;

    return <TextInput 
      ...rest 
      onChange=this.handleChange
      style=this.state.placeholder ? [style, placeholderStyle] : style
      />
  

用法:

<TextInput2 
  value=this.state.myText
  style= fontFamily: "MyFont" 
  placeholderStyle= fontFamily: "AnotherFont", borderColor: 'red' 
/>

【讨论】:

它给出了这个错误:undefined is not an object (evalating '_th is2.state.myText') - 我做错了吗? @cheesus 为什么不呢? 因为它使用的代码行数比 Sebastián Lara 的答案多 2300%。 @cheesus 它实际上也正确回答了 OP 的问题。 OP 承认 placeholderTextColor 的存在,并特别询问如何设置其他属性的样式。这个答案也是在钩子之前写的,但是用更少的代码行转换为基于钩子的替代方案应该是微不足道的 没注意到。但是,我在谷歌搜索如何设置占位符颜色时来自谷歌。从另一个答案的票数来看,我不是唯一一个。【参考方案3】:

您可以自己构建此功能。当输入为空时会显示占位符,因此您可以检查您的状态并相应地更改字体样式:

<TextInput
  onChangeText=txt => this.setState(enteredText: txt)
  fontStyle=this.state.enteredText.length == 0 ? 'italic' : 'normal'
  style=style.input />

由于某种原因,这似乎不适用于 fontFamily = System.所以你必须明确指定 fontFamily。

【讨论】:

onChange 传递一个事件对象,以获取您应该使用的文本event.nativeEvent.text 或者使用 onChangeText 因为它只是传递文本 在输入第一个字符和更新样式之间存在延迟,导致样式出现明显的跳跃【参考方案4】:

TextInput 的Content 和placeHolder 使用了共同的样式,所以可以为placeHolder 设置fontWeight 和fontSize。另外,您可以将属性placeholderTextColor 设置为TextInput

【讨论】:

【参考方案5】:

您也可以使用无状态组件。

这是我的解决方案:

首先,在我的屏幕组件中...

import React from 'react';
import  View  from 'react-native';
import MyWrappedComponent from '../wherever/your/components/are/MyWrappedComponent';

class ScreenComponent extends React.Component 
  constructor(props) 
    super(props);
    this.state = 
      myText: null,
    ;
    this.handleTextOnChange = this.handleTextOnChange.bind(this);
  

  handleTextOnChange(myText) 
    this.setState( myText );
  

  render() 
    const  myText  = this.state

  return (
    <View>
      <MyWrappedComponent            
        value=myText
        placeholder="My Placeholder Text"
        onChangeText=this.handleTextOnChange
        style=styles.someStyle
        placeholderStyle=style.somePlaceholderStyle
      />
    </View>
  )

然后,在我的包装组件中...

import React from 'react';
import  TextInput  from 'react-native-gesture-handler';

const MyWrappedComponent = (
  style,
  placeholderStyle,
  value,
  ...rest
) => (
  <TextInput
    ...rest
    style=!value ? [style, placeholderStyle] : style
  />
);

export default MyWrappedComponent;

【讨论】:

【参考方案6】:

如果您只是想调整占位符的位置,您可以将内部 a 包裹起来并为 : 添加样式

<View style=
    flex: 0.3,
    alignContent: "center",
    justifyContent: "center",
    alignSelf: "center"
    >

它将允许占位符居中对齐,因为有时“alignContent”、“alignItems”、“justifyContent”可能不起作用。另外:

inputContainerStyle=
                    borderColor: 'transparent'
                

设置任何边框线的样式(上面的那个删除了来自'react-native-elements'的所有边框)。

【讨论】:

【参考方案7】:

看看占位符:

TextInput 占位符将继承 TextInput 的样式。所以我们可以在 TextInput 样式中设置我们的样式。有时我们需要为占位符设置不同的颜色,因此我们可以轻松地使用placeholderTextColor 属性进行自定义。

【讨论】:

【参考方案8】:

我发现您分配给文本输入的样式也将应用于您的占位符文本。您可以为占位符文本设置的唯一属性是颜色,其他样式将从文本输入样式继承。

【讨论】:

【参考方案9】:

只要改变textInputStyle,占位符样式会和textInputStyle一样,你想改变颜色使用placeholderTextColor

【讨论】:

【参考方案10】:

传递一个组件作为占位符对我有用

【讨论】:

以上是关于如何在 React Native 中更改 TextInput 占位符的样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-native 中更改应用程序的显示名称

react-native:如何在反应上下文中更改子组件的参数?

无论如何在运行时 React Native 中更改启动画面?

如何在 react-native 项目中保存 info.plist 中的更改

在 React Native 中更改应用名称

如何在 react-native 应用程序中更改 android 的键盘主题?