我正在通过使用 FlatList 组件显示消息来完成本机反应。我正在尝试设置消息的样式,使它们是圆形的,但borderRadius
不起作用(左、右、上或下)。我发现了这一点:borderRadius 没有应用于 FlatList,但即使在添加overflow: 'hidden'
到我的代码之后,我也无法让它显示除矩形之外的任何内容。
编码:
render(){
return(
<View style={styles.container}>
<View style={styles.messages}>
<FlatList
data={this.state.messages}
renderItem={({ item }) => this.renderTextItem(item)}
keyExtractor={(item, index) => index.toString()}
extraData={this.state.messages}
/>
</View>
<KeyboardAvoidingView
style={styles.inputContainer}
behavior={(Platform.OS === 'ios') ? "padding" : null} enabled
keyboardVerticalOffset={Platform.select({ios: 80, android: 500})}
>
<TextInput
onChangeText={(text) => this.setState({userInput: text})}
value={this.state.userInput}
style={styles.textInput}
editable={this.state.inputEnabled}
placeholder={'Type something'}
autoFocus={true}
multiline={true}
onSubmitEditing={this.handleTextSubmit.bind(this)}
/>
</KeyboardAvoidingView>
</View>
)
}
款式:
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: colors.WHITE
},
messages: {
flex: 1,
marginTop: 20,
overflow: "hidden"
},
botMessages: {
color: colors.BLACK,
backgroundColor: '#EEE',
padding: 10,
borderBottomLeftRadius: 90,
borderBottomRightRadius: 90,
borderTopLeftRadius: 90,
marginBottom: 0,
borderTopRightRadius:90,
alignSelf: 'flex-start',
bottom: 23,
textAlign: 'left',
width: '75%'
},
userMessages: {
backgroundColor: colors.CHATREPLY,
color: colors.WHITE,
padding: 10,
marginBottom: 10,
marginRight: 5,
borderBottomLeftRadius: 20,
borderBottomRightRadius: 0,
borderTopLeftRadius: 80,
borderTopRightRadius: 20,
width: '45%',
alignSelf: 'flex-end',
textAlign: 'left'
},
responseContainer : {
flexDirection: 'row',
marginTop: 20,
marginBottom: 0,
},
inputContainer: {
flex: 1/7,
flexDirection: 'row',
backgroundColor: '#FFF',
borderTopWidth:1,
borderColor: "#c9c9c9"
},
textInput: {
paddingLeft: 20,
marginBottom: 35,
},
})
添加renderTextItem()
renderTextItem(item) {
let style,
responseStyle
if (item.from === 'bot') {
style = styles.botMessages
responseStyle = styles.responseContainer
} else {
style = styles.userMessages
responseStyle = {}
}
return (
<View style={responseStyle}>
<Text style={style}>{item.msg}</Text>
</View>
)
}