反应本机中带有/ flexbox的全宽按钮
Full width button w/ flex-box in react-native
我是 flexbox 的新手,无法在 react-native 中生成全宽按钮。一天多来,我一直试图自己解决这个问题,并且阅读了互联网上的所有相关文章/post 都无济于事。
我想要两个 TextInput
元素横跨整个屏幕宽度,它们下方有一个按钮也横跨整个屏幕宽度。 TextInput
元素 是 跨越屏幕的整个宽度,但这似乎是 Android 模拟器中的默认设置,我是 运行。
这是我的代码:
var MyModule = React.createClass({
render: function() {
return (
<View style={styles.container}>
<View style={styles.headline}>
<Text>Hello World</Text>
</View>
<View style={styles.inputsContainer}>
<TextInput style={[styles.input]} placeholder="Email" />
<TextInput
secureTextEntry={true}
style={[styles.input]}
placeholder="Password"
/>
<TouchableHighlight
style={styles.fullWidthButton}
onPress={this.buttonPressed}
>
<Text>Submit</Text>
</TouchableHighlight>
</View>
</View>
);
},
buttonPressed: function() {
console.log("button was pressed!");
}
});
var paddingLeft = 15;
var styles = StyleSheet.create({
inputsContainer: {
// Intentionally blank because I've tried everything & I'm clueless
},
fullWidthButton: {
// Intentionally blank because I've tried everything & I'm clueless
},
input: {
paddingLeft: paddingLeft,
height: 40,
borderColor: "black",
backgroundColor: "white"
},
container: {
flex: 1,
backgroundColor: "#f0f0f0",
alignItems: "stretch"
},
headline: {}
});
module.exports = Onboarding;
有人知道我需要做什么才能让 TouchableHighlight
横跨整个屏幕宽度吗?
您可以通过在 TouchableHighlight 的父元素上设置 flex:1 属性,然后将 flexDirection:row 属性 分配给 TouchableHighlight 元素来实现此目的:
<View style={styles.inputsContainer}>
<TouchableHighlight style={styles.fullWidthButton} onPress={this.buttonPressed}>
<Text style={styles.fullWidthButtonText}>Submit</Text>
</TouchableHighlight>
</View>
inputsContainer: {
flex: 1
},
fullWidthButton: {
backgroundColor: 'blue',
height:70,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
},
fullWidthButtonText: {
fontSize:24,
color: 'white'
}
我已经建立了一个完整的工作示例 here。此外,完整代码如下。
https://rnplay.org/apps/J6fnqg
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
TouchableHighlight,
TextInput,
} = React;
var MyModule = React.createClass({
render: function() {
return <View style={styles.container}>
<View style={styles.headline}>
<Text>Hello World</Text>
</View>
<View style={styles.inputsContainer}>
<TextInput style={[styles.input]} placeholder="Email" />
<TextInput secureTextEntry={true} style={[styles.input]} placeholder="Password" />
<TouchableHighlight style={styles.fullWidthButton} onPress={this.buttonPressed}>
<Text style={styles.fullWidthButtonText}>Submit</Text>
</TouchableHighlight>
</View>
</View>
},
buttonPressed: function() {
console.log('button was pressed!');
}
});
var paddingLeft = 15;
var styles = StyleSheet.create({
inputsContainer: {
flex: 1
},
fullWidthButton: {
backgroundColor: 'blue',
height:70,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
},
fullWidthButtonText: {
fontSize:24,
color: 'white'
},
input: {
paddingLeft: paddingLeft,
height: 40,
borderColor: 'black',
backgroundColor: 'white',
},
container: {
flex: 1,
backgroundColor: '#f0f0f0',
alignItems: 'stretch',
},
headline: {
}
});
AppRegistry.registerComponent('MyModule', () => MyModule);
我来这里是为了寻找同样的问题。经过进一步试验,我发现最简单的方法是使用 alignSelf: 'stretch'
。这会强制单个元素占据可用的全部宽度,例如
button: {
alignSelf: 'stretch'
}
Nader 的答案当然有效,但这似乎是使用 Flexbox 的正确方法。
现在有一个预定义的组件Button。即使使用文字,也需要注意View的宽度:
<View style={[{width:"100%"}]}>
<Button
onPress={this.closeModal}
title="Close"
color="#841584"
style={[{borderRadius: 5,}]}
hardwareAccelerated
/>
</View>
让我们使用下面的源代码来帮助设置按钮的宽度和高度。这里需要在视图布局中指定按钮的宽高参数。
<View style={[{ width: "90%", margin: 10, backgroundColor: "red" }]}>
<Button
onPress={this.buttonClickListener}
title="Button Three"
color="#90A4AE"
/>
</View>
提供的解决方案对我不起作用。您必须将按钮包装在一个额外的 View
组件中:
<View style={{flexDirection: "row"}}>
<View style = {{flex: 1}}>
<Button title="Button 1" />
</View>
<View style = {{flex: 1}}>
<Button title="Button 2" />
</View>
</View>
或将 Text
组件与 TouchableOpacity
一起使用:
<View style={{ flexDirection: "row"}}>
<TouchableOpacity style = {{width: "50%"}}>
<Text style={{textAlign:"center"}} > Button 1 </Text>
</TouchableOpacity>
<TouchableOpacity style = {{width: "50%"}}>
<Text style={{textAlign:"center"}} > Button 1 </Text>
</TouchableOpacity>
</View>
在这里尝试两种解决方案:https://snack.expo.io/wAENhUQrp
justifyContent: 'space-between'
没有使用所有可用的 space 按钮
button {alignSelf: 'stretch'}
不适用于 Button 组件
您可以使用:
alignItems: 'center',
width: '100%',
示例:
<View style={styles.container}>
<Button style={styles.button} />
</View>
const styles = StyleSheet.create({
container: {
alignItems: 'center',
width: '100%',
},
button: {
alignSelf: 'stretch',
},
})
我是 flexbox 的新手,无法在 react-native 中生成全宽按钮。一天多来,我一直试图自己解决这个问题,并且阅读了互联网上的所有相关文章/post 都无济于事。
我想要两个 TextInput
元素横跨整个屏幕宽度,它们下方有一个按钮也横跨整个屏幕宽度。 TextInput
元素 是 跨越屏幕的整个宽度,但这似乎是 Android 模拟器中的默认设置,我是 运行。
这是我的代码:
var MyModule = React.createClass({
render: function() {
return (
<View style={styles.container}>
<View style={styles.headline}>
<Text>Hello World</Text>
</View>
<View style={styles.inputsContainer}>
<TextInput style={[styles.input]} placeholder="Email" />
<TextInput
secureTextEntry={true}
style={[styles.input]}
placeholder="Password"
/>
<TouchableHighlight
style={styles.fullWidthButton}
onPress={this.buttonPressed}
>
<Text>Submit</Text>
</TouchableHighlight>
</View>
</View>
);
},
buttonPressed: function() {
console.log("button was pressed!");
}
});
var paddingLeft = 15;
var styles = StyleSheet.create({
inputsContainer: {
// Intentionally blank because I've tried everything & I'm clueless
},
fullWidthButton: {
// Intentionally blank because I've tried everything & I'm clueless
},
input: {
paddingLeft: paddingLeft,
height: 40,
borderColor: "black",
backgroundColor: "white"
},
container: {
flex: 1,
backgroundColor: "#f0f0f0",
alignItems: "stretch"
},
headline: {}
});
module.exports = Onboarding;
有人知道我需要做什么才能让 TouchableHighlight
横跨整个屏幕宽度吗?
您可以通过在 TouchableHighlight 的父元素上设置 flex:1 属性,然后将 flexDirection:row 属性 分配给 TouchableHighlight 元素来实现此目的:
<View style={styles.inputsContainer}>
<TouchableHighlight style={styles.fullWidthButton} onPress={this.buttonPressed}>
<Text style={styles.fullWidthButtonText}>Submit</Text>
</TouchableHighlight>
</View>
inputsContainer: {
flex: 1
},
fullWidthButton: {
backgroundColor: 'blue',
height:70,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
},
fullWidthButtonText: {
fontSize:24,
color: 'white'
}
我已经建立了一个完整的工作示例 here。此外,完整代码如下。
https://rnplay.org/apps/J6fnqg
'use strict';
var React = require('react-native');
var {
AppRegistry,
StyleSheet,
Text,
View,
TouchableHighlight,
TextInput,
} = React;
var MyModule = React.createClass({
render: function() {
return <View style={styles.container}>
<View style={styles.headline}>
<Text>Hello World</Text>
</View>
<View style={styles.inputsContainer}>
<TextInput style={[styles.input]} placeholder="Email" />
<TextInput secureTextEntry={true} style={[styles.input]} placeholder="Password" />
<TouchableHighlight style={styles.fullWidthButton} onPress={this.buttonPressed}>
<Text style={styles.fullWidthButtonText}>Submit</Text>
</TouchableHighlight>
</View>
</View>
},
buttonPressed: function() {
console.log('button was pressed!');
}
});
var paddingLeft = 15;
var styles = StyleSheet.create({
inputsContainer: {
flex: 1
},
fullWidthButton: {
backgroundColor: 'blue',
height:70,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
},
fullWidthButtonText: {
fontSize:24,
color: 'white'
},
input: {
paddingLeft: paddingLeft,
height: 40,
borderColor: 'black',
backgroundColor: 'white',
},
container: {
flex: 1,
backgroundColor: '#f0f0f0',
alignItems: 'stretch',
},
headline: {
}
});
AppRegistry.registerComponent('MyModule', () => MyModule);
我来这里是为了寻找同样的问题。经过进一步试验,我发现最简单的方法是使用 alignSelf: 'stretch'
。这会强制单个元素占据可用的全部宽度,例如
button: {
alignSelf: 'stretch'
}
Nader 的答案当然有效,但这似乎是使用 Flexbox 的正确方法。
现在有一个预定义的组件Button。即使使用文字,也需要注意View的宽度:
<View style={[{width:"100%"}]}>
<Button
onPress={this.closeModal}
title="Close"
color="#841584"
style={[{borderRadius: 5,}]}
hardwareAccelerated
/>
</View>
让我们使用下面的源代码来帮助设置按钮的宽度和高度。这里需要在视图布局中指定按钮的宽高参数。
<View style={[{ width: "90%", margin: 10, backgroundColor: "red" }]}>
<Button
onPress={this.buttonClickListener}
title="Button Three"
color="#90A4AE"
/>
</View>
提供的解决方案对我不起作用。您必须将按钮包装在一个额外的 View
组件中:
<View style={{flexDirection: "row"}}>
<View style = {{flex: 1}}>
<Button title="Button 1" />
</View>
<View style = {{flex: 1}}>
<Button title="Button 2" />
</View>
</View>
或将 Text
组件与 TouchableOpacity
一起使用:
<View style={{ flexDirection: "row"}}>
<TouchableOpacity style = {{width: "50%"}}>
<Text style={{textAlign:"center"}} > Button 1 </Text>
</TouchableOpacity>
<TouchableOpacity style = {{width: "50%"}}>
<Text style={{textAlign:"center"}} > Button 1 </Text>
</TouchableOpacity>
</View>
在这里尝试两种解决方案:https://snack.expo.io/wAENhUQrp
justifyContent: 'space-between'
没有使用所有可用的 space 按钮button {alignSelf: 'stretch'}
不适用于 Button 组件
您可以使用:
alignItems: 'center',
width: '100%',
示例:
<View style={styles.container}>
<Button style={styles.button} />
</View>
const styles = StyleSheet.create({
container: {
alignItems: 'center',
width: '100%',
},
button: {
alignSelf: 'stretch',
},
})