《React-Native系列》RN组件之Text和TextInput以及注意要点

本文主要是介绍《React-Native系列》RN组件之Text和TextInput以及注意要点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天把写的RN程序从iOS上迁移到Android上,发现了一些问题,主要涉及到Text和TextInput这两个组件,所以用一节来专门记录下来。

Text组件

我们先来看官网给的例子:
[javascript]  view plain copy
在CODE上查看代码片 派生到我的代码片
  1. renderText: function() {  
  2.   return (  
  3.     <Text style={styles.baseText}>  
  4.       <Text style={styles.titleText} onPress={this.onPressTitle}>  
  5.         {this.state.titleText + '\n\n'}  
  6.       </Text>  
  7.       <Text numberOfLines={5}>  
  8.         {this.state.bodyText}  
  9.       </Text>  
  10.     </Text>  
  11.   );  
  12. },  
  13. ...  
  14. var styles = StyleSheet.create({  
  15.   baseText: {  
  16.     fontFamily: 'Cochin',  
  17.   },  
  18.   titleText: {  
  19.     fontSize: 20,  
  20.     fontWeight: 'bold',  
  21.   },  
  22. };  

属性

ios allowFontScaling bool 
控制字体是否要根据iOS的“文本大小”辅助选项来进行缩放。

numberOfLines number 
用来当文本过长的时候裁剪文本。包括折叠产生的换行在内,总的行数不会超过这个属性的限制。

onLayout function 
当挂载或者布局变化以后调用,参数为如下的内容:{nativeEvent: {layout: {x, y, width, height}}}

onPress function 
当文本被点击以后调用此回调函数。

样式

color string

fontFamily string

fontSize number

fontStyle enum('normal', 'italic')

fontWeight enum("normal", 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900')
指定字体的粗细。大多数字体都支持'normal'和'bold'值。并非所有字体都支持所有的数字值。如果某个值不支持,则会自动选择最接近的值。

letterSpacing number

lineHeight number

textAlign enum("auto", 'left', 'right', 'center', 'justify')
指定文本的对齐方式。其中'justify'值仅iOS支持。

androidtextAlignVertical enum('auto', 'top', 'bottom', 'center')

ios letterSpacing number

ios textDecorationColor string

textDecorationLine enum("none", 'underline', 'line-through', 'underline line-through')

ios textDecorationStyle enum("solid", 'double', 'dotted', 'dashed')

ios  writingDirection enum("auto", 'ltr', 'rtl')

testID string 
用来在端到端测试中标记这个视图。

ios  suppressHighlighting bool 
当为true时,如果文本被按下,则没有任何视觉效果。默认情况下,文本被按下时会有一个灰色的、椭圆形的高光。


注意点:
1、在使用Text的过程中,实现文本垂直居中、水平居中的效果(iOS和Android通用)
[javascript]  view plain copy
在CODE上查看代码片 派生到我的代码片
  1. <View  style={styles.textView}>  
  2.     <Text style={styles.text}> 水平垂直居中</Text>  
  3. </View>  
  4.   
  5. textView:{  
  6.   flexDirection:'column',  
  7.   justifyContent:'center',  
  8.   alignItems:'center',  
  9. }  
  10.   
  11. text:{  
  12.     fontSize:12,  
  13.     color:'#f2f2f2',  
  14. }  

尽量用view去包裹一层Text组件,text组件只负责基础的文字样式,View组件负责对齐方式等。

2、在Android平台上,Text组件里使用paddingLeft 属性,不好使,直接顶着View了。
解决方式:1)将paddingLeft放在View属性上
2)将paddingLeft修改为marginLeft
建议使用第一种方案修改,把对齐方式交给view去处理,Text只负责文本属性的显示。

TextInput组件

我们也来看看官网的api。
[javascript]  view plain copy
在CODE上查看代码片 派生到我的代码片
  1. <TextInput  
  2.    style={{height: 40, borderColor: 'gray', borderWidth: 1}}  
  3.    onChangeText={(text) => this.setState({text})}  
  4.    value={this.state.text}  
  5.  />  

属性:


autoCapitalize enum('none', 'sentences', 'words', 'characters') 
控制TextInput是否要自动将特定字符切换为大写:
characters: 所有的字符。
words: 每个单词的第一个字符。
sentences: 每句话的第一个字符(默认)。
none: 不自动切换任何字符为大写。

autoCorrect bool 
如果为false,会关闭拼写自动修正。默认值是true。

autoFocus bool 
如果为true,在componentDidMount后会获得焦点。默认值为false。

blurOnSubmit bool 
如果为true,文本框会在提交的时候失焦。对于单行输入框默认值为true,多行则为false。注意:对于多行输入框来说,如果将blurOnSubmit设为true,则在按下回车键时就会失去焦点同时触发onSubmitEditing事件,而不会换行。

defaultValue string 
提供一个文本框中的初始值。当用户开始输入的时候,值就可以改变。在一些简单的使用情形下,如果你不想用监听消息然后更新value属性的方法来保持属性和状态同步的时候,就可以用defaultValue来代替。

editable bool 
如果为false,文本框是不可编辑的。默认值为true。

keyboardType enum("default", 'numeric', 'email-address', "ascii-capable", 'numbers-and-punctuation', 'url', 'number-pad', 'phone-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') 
决定弹出的何种软键盘的,譬如numeric(纯数字键盘)。这些值在所有平台都可用:
default
numeric
email-address

maxLength number 
限制文本框中最多的字符数。使用这个属性而不用JS逻辑去实现,可以避免闪烁的现象。

multiline bool 
如果为true,文本框中可以输入多行文字。默认值为false。

onBlur function 
当文本框失去焦点的时候调用此回调函数。

onChange function 
当文本框内容变化时调用此回调函数。

onChangeText function 
当文本框内容变化时调用此回调函数。改变后的文字内容会作为参数传递。

onEndEditing function 
当文本输入结束后调用此回调函数。

onFocus function 
当文本框获得焦点的时候调用此回调函数。

onLayout function 
当组件挂载或者布局变化的时候调用,参数为{x, y, width, height}。

onSubmitEditing function 
此回调函数当软键盘的确定/提交按钮被按下的时候调用此函数。如果multiline={true},此属性不可用。

placeholder string 
如果没有任何文字输入,会显示此字符串。

placeholderTextColor string 
占位字符串显示的文字颜色。

secureTextEntry bool 
如果为true,文本框会遮住之前输入的文字,这样类似密码之类的敏感文字可以更加安全。默认值为false。

selectTextOnFocus bool 
如果为true,当获得焦点的时候,所有的文字都会被选中。

selectionColor string 
设置输入框高亮时的颜色(在iOS上还包括光标)

style Text#style 
译注:这意味着本组件继承了所有Text的样式。

value string 
文本框中的文字内容。
TextInput是一个受约束的(Controlled)的组件,意味着如果提供了value属性,原生值会被强制与value属性保持一致。在大部分情况下这都工作的很好,不过有些情况下会导致一些闪烁现象——一个常见的原因就是通过不改变value来阻止用户进行编辑。如果你希望阻止用户输入,可以考虑设置editable={false};如果你是希望限制输入的长度,可以考虑设置maxLength属性,这两个属性都不会导致闪烁。


ios   clearButtonMode enum('never', 'while-editing', 'unless-editing', 'always') 
是否要在文本框右侧显示“清除”按钮。

ios    clearTextOnFocus bool 
如果为true,每次开始输入的时候都会清除文本框的内容。

ios    enablesReturnKeyAutomatically bool 
如果为true,键盘会在文本框内没有文字的时候禁用确认按钮。默认值为false。

ios    keyboardAppearance enum('default', 'light', 'dark') 
指定键盘的颜色。

ios   onKeyPress function 
当一个键被按下的时候调用此回调。被按下的键会作为参数传递给回调函数。会在onChange之前调用。

ios    returnKeyType enum('default', 'go', 'google', 'join', 'next', 'route', 'search', 'send', 'yahoo', 'done', 'emergency-call')
决定“确定”按钮显示的内容。

ios    selectionState DocumentSelectionState 
参见DocumentSelectionState.js,可以控制一个文档中哪段文字被选中的状态。

android  numberOfLines number 
设置输入框的行数。当multiline设置为true时使用它,可以占据对应的行数。

android  underlineColorAndroid string 
文本框的下划线颜色(译注: 如果要去掉文本框的边框,请将此属性设为透明transparent)。


注意点:
1、在使用TextInput的过程中,在Android平台下,输入框下有个横线,此时需要将属性underlineColorAndroid  设置为 transparent来解决。
2、常用的TextInput是作为文本域,譬如最多输入50个字符。
此时需要设置   multiline ={true}
maxLength ={50}

感觉Text和TextInput组件在Android上的问题比较多,遇到一个解决一个吧。

这篇关于《React-Native系列》RN组件之Text和TextInput以及注意要点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510350

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Vue ElementUI中Upload组件批量上传的实现代码

《VueElementUI中Upload组件批量上传的实现代码》ElementUI中Upload组件批量上传通过获取upload组件的DOM、文件、上传地址和数据,封装uploadFiles方法,使... ElementUI中Upload组件如何批量上传首先就是upload组件 <el-upl

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring