我是反应原生的新手,我正在尝试同时为Android和iOS制作应用。
目前,我已设置登录屏幕,但textInput中使用的键入文本和占位符文本未显示在Android应用程序中(适用于iPhone)。
以下是代码段和样式表:
'use strict';
import React, { Component } from 'react'
var Dimensions = require('Dimensions');
var windowSize = Dimensions.get('window');
import {
AppRegistry,
StyleSheet,
View,
Text,
TextInput,
Image
} from 'react-native';
class LoginPage extends Component {
constructor() {
super()
this.state = {
username: '',
password: ''
}
}
render() {
return (
<View style={styles.container}>
<Image style={styles.bg} source={require('./Resources/orangebackground.png')} />
<View style={styles.header}>
<Image source={require('./Resources/logo.png')} />
</View>
<View style={styles.inputs}>
<View style={styles.inputContainer}>
<Image style={styles.inputUsername} source={require('./Resources/un.png')}/>
<TextInput
style={[styles.input, styles.whiteFont]}
underlineColorAndroid={'white'}
placeholder='Username'
placeholderTextColor="white"
//value={this.state.username}
/>
</View>
<View style={styles.inputContainer}>
<Image style={styles.inputPassword} source={require('./Resources/pw.png')}/>
<TextInput
password={true}
style={[styles.input, styles.whiteFont]}
placeholder="Password"
placeholderTextColor="#FFF"
underlineColorAndroid={'transparent'}
//value={this.state.password}
/>
</View>
<View style={styles.forgotContainer}>
<Text style={styles.greyFont}>Forgot Password</Text>
</View>
</View>
<View style={styles.signin}>
<Text style={styles.whiteFont}>Sign In</Text>
</View>
<View style={styles.signup}>
<Text style={styles.greyFont}>Don't have an account?<Text style={styles.whiteFont}> Sign Up</Text></Text>
</View>
</View>
);
}
}
var styles = StyleSheet.create({
container: {
flexDirection: 'column',
flex: 1,
backgroundColor: 'transparent'
},
bg: {
position: 'absolute',
left: 0,
top: 0,
width: windowSize.width,
height: windowSize.height
},
header: {
justifyContent: 'center',
alignItems: 'center',
flex: .5,
backgroundColor: 'transparent'
},
mark: {
width: 150,
height: 150
},
signin: {
backgroundColor: '#FF3366',
padding: 20,
alignItems: 'center'
},
signup: {
justifyContent: 'center',
alignItems: 'center',
flex: .15
},
inputs: {
marginTop: 10,
marginBottom: 10,
flex: .25
},
inputPassword: {
marginLeft: 15,
width: 20,
height: 21
},
inputUsername: {
marginLeft: 15,
width: 20,
height: 20
},
inputContainer: {
padding: 10,
borderWidth: 1,
borderBottomColor: '#CCC',
borderColor: 'transparent'
},
input: {
position: 'absolute',
left: 61,
top: 12,
right: 0,
height: 20,
fontSize: 14
},
forgotContainer: {
alignItems: 'flex-end',
padding: 15,
},
greyFont: {
color: '#D8D8D8'
},
whiteFont: {
color: '#FFF'
}
})
感谢任何帮助。谢谢。
答案 0 :(得分:20)
出于某种原因,在Android上,height
样式属性需要加倍,而不是iOS。可能有一种更清洁的方法可以做到这一点,但这是我们如何解决这个问题。
<TextInput style={[styles.input, {height: Platform.OS == 'android' ? 40 : 20}]} ... />
答案 1 :(得分:7)
我最近遇到过这个问题,我通过将paddingVertical: 0
添加到输入样式并设置underlineColorAndroid="transparent"
道具来解决它。这种方式对于两个平台的风格都是相同的。似乎android上有一些默认的垂直填充。
在React Native的Github上也有相关的issue。
答案 2 :(得分:0)
要注意的另一件事是在Android中,如果将TextInput高度设置为小于或等于20,则光标和文本将变为不可见。当高度设置为大于或等于40时,它们将正确可见。
答案 3 :(得分:0)
对于android系统,还需要设置正确的lineHeight。
input: {
position: 'absolute',
left: 61,
top: 12,
right: 0,
height: 20,
fontSize: 14,
lineHeight: 14 // <- line height should be corresponding to your font size
},