更改按钮颜色onPress(切换功能)React Native

编程入门 行业动态 更新时间:2024-10-08 10:49:36
本文介绍了更改按钮颜色onPress(切换功能)React Native的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 希望一切顺利。

我似乎在使用基本按钮功能时遇到了困难。我需要的只是要更改的类的状态以及每次按下按钮时要更改的按钮样式。与TouchableHighlight不同,我需要将颜色更改保持到再次按下该按钮(恢复原始颜色)。

我尝试使用SwitchIOS但它没有似乎很容易被设计成一个圆形按钮,因此并没有真正解决。我是一个新手,所以仍然在学习,非常感谢你的帮助。以下是我到目前为止:

'use strict'; var React = require('react-native'); var Dimensions = require('Dimensions'); var window = Dimensions.get('window'); var Icon = require('react-native-vector-icons / FontAwesome'); var { AppRegistry,样式表,文字,查看, NavigatorIOS,图片, TouchableHighlight, TextInput,} = React; 类LS1扩展React.Component { 构造函数(道具){ super(道具); this.state = { paleo:false,素食:假,素食:假, nutfree:false, dairyfree:false, healthy:false, glutenfree:false,} } SkipLogin(){ var num = window.height / 8.335; console.log(num); } render(){ return(< View style = {styles.container}> < Image source = {require ('image!LS1')} style = {styles.bgImage}> < Text style = {styles.icontext}>帮助我们了解您的饮食生活方式。< / Text> < View style = {styles.container}> < View style = {{flex:1,alignItems:'center',flexDirection:'row',justifyContent:'center', marginTop:-20}}> < TouchableHighlight underlayColor ='rgba(73,182,77,1,0.9)'style = {styles.bubblechoice}> < Image style = {styles。 bubblechoice} source = {require('image!vegan')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}> Vegan< /文字> < /查看> < /图片> < / TouchableHighlight> & LT; TouchableHighlight underlayColor ='rgba(73,182,77,1,0.6)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!paleo')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}> Paleo< / Text> < /查看> < / Image> < / TouchableHighlight> < TouchableHighlight underlayColor ='rgba(73,182,77,1,0.6)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!nutfree')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}> Nut-Free< / Text> < /查看> < / Image> < / TouchableHighlight> < TouchableHighlight underlayColor ='rgba(73,182,77,1,0.6)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!glutenfree')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}>无麸质< / Text> < /查看> < / Image> < / TouchableHighlight> < /查看> < View style = {{flex:1,alignItems:'center',flexDirection:'row',justifyContent:'center',marginTop:-50}}> < TouchableHighlight underlayColor ='rgba(73,182,77,1,0.6)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!dairyfree')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}> Dairy-Free< / Text> < /查看> < / Image> < / TouchableHighlight> < TouchableHighlight underlayColor ='rgba(73,182,77,1,0.6)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!vegetarian')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}>素食< / Text> < /查看> < / Image> < / TouchableHighlight> < TouchableHighlight underlayColor ='rgba(73,182,77,1,1)'style = {styles.bubblechoice}> < Image style = {styles.bubblechoice} source = {require('image!healthy')}> < View style = {styles.overlay}> < Text style = {styles.choicetext}> Healthy< / Text> < /查看> < / Image> < / TouchableHighlight> < /查看> < /查看> < Image source = {require('image!nextbtn')} style = {{resizeMode:'contains',width:200,height:50,alignSelf:'center',marginBottom:50 }} /> < TouchableHighlight onPress = {this.SkipLogin.bind(this)} underlayColor ='transparent'> < View style = {{backgroundColor:'transparent',alignItems:'center',marginBottom:8}}> <文字>跳过此步骤< / Text> < /查看> < / TouchableHighlight> < / Image> < /查看> ); } }; var styles = StyleSheet.create({容器:{ flex:1, justifyContent:'center', alignItems:'center' , backgroundColor:'transparent'}, bgImage:{ flex:1, width:window.width, resizeMode:'cover' ,}, icontext:{ color:'#5d5d5d', fontWeight:'400', fontSize:20, backgroundColor:'透明', paddingLeft:10, alignItems:'center', marginTop:window.height / 2.2, textAlign:'center', margin:10 ,}, bubblechoice_click:{ height:window.height / 8.335, borderRadius:(window.height / 8.3350)/ 2, marginRight:2, 宽度:window.height / 8.335,}, bubblechoice:{ height:window.height / 8.335, borderRadius:(window.height / 8.3350) / 2, marginRight:2,宽度:window.height / 8.335, },行:{ flex:1, alignItems:'center', flexDirection:'row', justifyContent:'center', marginTop:-30,}, choicetext:{ alignItems:'center', alignSelf:'center', color:'white', marginTop:35, fontWeight:'600', marginLeft:-18, fontSize:14, flex:1, textAlign:'center '}, overlay:{ backgroundColor:'rgba(80,94,104,0.7)',身高:100,宽度:100, alignItems:'center'}, }); module.exports = LS1;

以下是产生的信息:

以下是按钮在被选中后的样子:

解决方案

我认为你应退后一步做一些基本的反应在深入研究React Native之前的教程 - 这是一个相当简单的问题要解决:)这里有一个解决方案:

'用严格'; var React = require('react-native'); var Dimensions = require('Dimensions'); var window = Dimensions.get('window'); var { AppRegistry,样式表,文本,查看, NavigatorIOS,图像, TouchableHighlight, TextInput,} = React; class ToggleButton扩展React.Component { render(){ return(< TouchableHighlight underlayColor ='rgba(73,182,77,1) ,0.9)'style = {styles.bubblechoice} onPress = {this.props.onPress}> < Image style = {styles.bubblechoice} source = {{uri:'https://facebook.github .io / react / img / logo_og.png'}}> < View style = {[styles.overlay,this.props.selected?{backgroundColor:'rgba(80,94,104,0)'} :{}]}> <文字样式= {styles.choicetext}> {this.props.label}< /文字> < / View> < / Image> < / TouchableHighlight> ); } } 类LS1扩展React.Component { 构造函数(道具){ super(道具) ; this.state = { paleo:false,素食主义者:假,素食:假,} } updateChoice(type){ let newState = {... this.state}; newState [type] =!newState [type]; this.setState(newState); } SkipLogin(){ var num = window.height / 8.335; console.log(num); } render(){ return(< View style = {styles.container}> < View style = {styles .bgImage}> < Text style = {styles.icontext}>帮助我们了解您的饮食生活方式。< / Text> < View style = {styles .container}> < View style = {{flex:1,alignItems:'center',flexDirection:'row',justifyContent:'center',marginTop:-20}}> < ToggleButton label ='Vegan'onPress = {()=> {this.updateChoice('vegan')}} selected = {this.state.vegan} /> < ToggleButton label ='Paleo 'onPress = {()=> {this.updateChoice('paleo')}} selected = {this.state.paleo} /> < ToggleButton label ='Vegetarian'onPress = {()= > {this.updateChoice('vegetarian')}} selected = {this.state.vegetarian} /> < / View> < / View> < TouchableHighli ght onPress = {this.SkipLogin.bind(this)} underlayColor ='transparent'> < View style = {{backgroundColor:'transparent',alignItems:'center',marginBottom:8}}> <文字>跳过此步骤< / Text> < /查看> < / TouchableHighlight> < / View> < /查看> ); } }; var styles = StyleSheet.create({容器:{ flex:1, justifyContent:'center', alignItems:'center' , backgroundColor:'transparent'}, bgImage:{ flex:1, width:window.width, resizeMode:'cover' ,}, icontext:{ color:'#5d5d5d', fontWeight:'400', fontSize:20, backgroundColor:'透明', paddingLeft:10, alignItems:'center', marginTop:window.height / 2.2, textAlign:'center', margin:10 ,}, bubblechoice_click:{ height:window.height / 8.335, borderRadius:(window.height / 8.3350)/ 2, marginRight:2, 宽度:window.height / 8.335,}, bubblechoice:{ height:window.height / 8.335, borderRadius:(window.height / 8.3350) / 2, marginRight:2,宽度:window.height / 8.335, },行:{ flex:1, alignItems:'center', flexDirection:'row', justifyContent:'center', marginTop:-30,}, choicetext:{ alignItems:'center', alignSelf:'center', color:'white', marginTop:35, fontWeight:'600', marginLeft:-18, fontSize:14, flex:1, textAlign:'center '}, overlay:{ backgroundColor:'rgba(80,94,104,0.7)',身高:100,宽度:100, alignItems:'center'}, }); module.exports = LS1; AppRegistry.registerComponent('main',()=> LS1);

您可以通过从exponentjs/ (app store或beta,无论你喜欢哪个)然后加载exp://exp.host/@brentvatne/button-color-exp

hope all is well.

I seem to be having difficulty with a basic button functionality. All I need is the state of the class to change and the button style to change every-time the button is pressed. Unlike TouchableHighlight, I need to color change to stay until the button is pressed again (to go back to the original color).

I have tried to use SwitchIOS but it doesn't seem to be easily styled into a circular button, and therefore doesn't really work out. I am a novice so still learning and would greatly appreciate your help. Here is what I have so far:

'use strict'; var React = require('react-native'); var Dimensions = require('Dimensions'); var window = Dimensions.get('window'); var Icon = require('react-native-vector-icons/FontAwesome'); var { AppRegistry, StyleSheet, Text, View, NavigatorIOS, Image, TouchableHighlight, TextInput, } = React; class LS1 extends React.Component{ constructor(props){ super(props); this.state = { paleo: false, vegan: false, vegetarian: false, nutfree: false, dairyfree: false, healthy: false, glutenfree: false, } } SkipLogin() { var num = window.height/8.335; console.log(num); } render() { return ( <View style={styles.container}> <Image source={require('image!LS1')} style={styles.bgImage}> <Text style={styles.icontext}>Help us get to know your dietary lifestyle.</Text> <View style={styles.container}> <View style={{flex: 1, alignItems: 'center', flexDirection: 'row',justifyContent: 'center',marginTop:-20}}> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.9)' style={styles.bubblechoice}> <Image style={styles.bubblechoice} source={require('image!vegan')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Vegan</Text> </View> </Image> </TouchableHighlight> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.6)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!paleo')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Paleo</Text> </View> </Image> </TouchableHighlight> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.6)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!nutfree')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Nut-Free</Text> </View> </Image> </TouchableHighlight> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.6)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!glutenfree')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Gluten-Free</Text> </View> </Image> </TouchableHighlight> </View> <View style={{flex: 1, alignItems: 'center', flexDirection: 'row',justifyContent: 'center',marginTop:-50}}> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.6)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!dairyfree')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Dairy-Free</Text> </View> </Image> </TouchableHighlight> <TouchableHighlight underlayColor='rgba(73,182,77,1,0.6)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!vegetarian')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Vegetarian</Text> </View> </Image> </TouchableHighlight> <TouchableHighlight underlayColor='rgba(73,182,77,1,1)' style={styles.bubblechoice} > <Image style={styles.bubblechoice} source={require('image!healthy')}> <View style={styles.overlay}> <Text style={styles.choicetext}>Healthy</Text> </View> </Image> </TouchableHighlight> </View> </View> <Image source={require('image!nextbtn')} style={{resizeMode: 'contain', width:200, height:50, alignSelf: 'center', marginBottom: 50}}/> <TouchableHighlight onPress={this.SkipLogin.bind(this)} underlayColor='transparent'> <View style={{backgroundColor: 'transparent', alignItems: 'center', marginBottom: 8}}> <Text>skip this step</Text> </View> </TouchableHighlight> </Image> </View> ); } }; var styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'transparent' }, bgImage: { flex: 1, width: window.width, resizeMode: 'cover', }, icontext: { color: '#5d5d5d', fontWeight: '400', fontSize: 20, backgroundColor: 'transparent', paddingLeft: 10, alignItems: 'center', marginTop: window.height/2.2, textAlign: 'center', margin: 10, }, bubblechoice_click: { height: window.height/8.335, borderRadius: (window.height/8.3350)/2, marginRight: 2, width: window.height/8.335, }, bubblechoice: { height: window.height/8.335, borderRadius: (window.height/8.3350)/2, marginRight: 2, width: window.height/8.335, }, row: { flex: 1, alignItems: 'center', flexDirection: 'row', justifyContent: 'center', marginTop: -30, }, choicetext: { alignItems: 'center', alignSelf: 'center', color: 'white', marginTop: 35, fontWeight: '600', marginLeft: -18, fontSize: 14, flex: 1, textAlign: 'center' }, overlay: { backgroundColor:'rgba(80,94,104,0.7)', height: 100, width: 100, alignItems:'center' }, }); module.exports = LS1;

And here is a visual of what that produces:

Here's what the button should look like after being selected:

解决方案

I think you should take a step back and do some basic React tutorials before digging too much into React Native - this is a fairly straightforward problem to solve :) Here's a solution for you:

'use strict'; var React = require('react-native'); var Dimensions = require('Dimensions'); var window = Dimensions.get('window'); var { AppRegistry, StyleSheet, Text, View, NavigatorIOS, Image, TouchableHighlight, TextInput, } = React; class ToggleButton extends React.Component { render() { return ( <TouchableHighlight underlayColor='rgba(73,182,77,1,0.9)' style={styles.bubblechoice} onPress={this.props.onPress}> <Image style={styles.bubblechoice} source={{uri: 'facebook.github.io/react/img/logo_og.png'}}> <View style={[styles.overlay, this.props.selected ? {backgroundColor: 'rgba(80,94,104,0)'} : {}]}> <Text style={styles.choicetext}>{this.props.label}</Text> </View> </Image> </TouchableHighlight> ); } } class LS1 extends React.Component{ constructor(props){ super(props); this.state = { paleo: false, vegan: false, vegetarian: false, } } updateChoice(type) { let newState = {...this.state}; newState[type] = !newState[type]; this.setState(newState); } SkipLogin() { var num = window.height/8.335; console.log(num); } render() { return ( <View style={styles.container}> <View style={styles.bgImage}> <Text style={styles.icontext}>Help us get to know your dietary lifestyle.</Text> <View style={styles.container}> <View style={{flex: 1, alignItems: 'center', flexDirection: 'row',justifyContent: 'center',marginTop:-20}}> <ToggleButton label='Vegan' onPress={() => { this.updateChoice('vegan') }} selected={this.state.vegan} /> <ToggleButton label='Paleo' onPress={() => { this.updateChoice('paleo') }} selected={this.state.paleo} /> <ToggleButton label='Vegetarian' onPress={() => { this.updateChoice('vegetarian') }} selected={this.state.vegetarian} /> </View> </View> <TouchableHighlight onPress={this.SkipLogin.bind(this)} underlayColor='transparent'> <View style={{backgroundColor: 'transparent', alignItems: 'center', marginBottom: 8}}> <Text>skip this step</Text> </View> </TouchableHighlight> </View> </View> ); } }; var styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'transparent' }, bgImage: { flex: 1, width: window.width, resizeMode: 'cover', }, icontext: { color: '#5d5d5d', fontWeight: '400', fontSize: 20, backgroundColor: 'transparent', paddingLeft: 10, alignItems: 'center', marginTop: window.height/2.2, textAlign: 'center', margin: 10, }, bubblechoice_click: { height: window.height/8.335, borderRadius: (window.height/8.3350)/2, marginRight: 2, width: window.height/8.335, }, bubblechoice: { height: window.height/8.335, borderRadius: (window.height/8.3350)/2, marginRight: 2, width: window.height/8.335, }, row: { flex: 1, alignItems: 'center', flexDirection: 'row', justifyContent: 'center', marginTop: -30, }, choicetext: { alignItems: 'center', alignSelf: 'center', color: 'white', marginTop: 35, fontWeight: '600', marginLeft: -18, fontSize: 14, flex: 1, textAlign: 'center' }, overlay: { backgroundColor:'rgba(80,94,104,0.7)', height: 100, width: 100, alignItems:'center' }, }); module.exports = LS1; AppRegistry.registerComponent('main', () => LS1);

You can try it out by downloading Exponent to your phone from exponentjs/ (app store or beta, whichever you prefer) then loading up exp://exp.host/@brentvatne/button-color-exp

更多推荐

更改按钮颜色onPress(切换功能)React Native

本文发布于:2023-11-27 21:27:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1639666.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:按钮   颜色   功能   onPress   React

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!