如何将按钮与中心对齐以响应本机平面列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将按钮与中心对齐以响应本机平面列表相关的知识,希望对你有一定的参考价值。

我想在平面列表的中心放置一个按钮,如下图所示。

enter image description here

这是我的代码

    render() {
            return (
                <View>
                    <View style={styles.separator} />
                    <View style={styles.container}>

                        <FlatList
                            data={this.state.dataSource}
                            keyExtractor={this.keyExtractor}
                            renderItem={this.renderItem}
                            ItemSeparatorComponent={this.renderSeparator.bind(this)}
                        />
                        <View style={styles.buttonContainer}>
                            <TouchableOpacity onPress={Actions.appointmentreminder} style={styles.buttonStyle} >
                                <Image style={{ margin: 5 }} source={require('../assets/proxy_messages_icon.png')} />
                                <Text style={styles.buttonText}>{Strings.SendMessage}</Text>
                            </TouchableOpacity>
                        </View>
                    </View>
                </View>
            );
        }

const styles = StyleSheet.create({
separator: {
        borderRadius: 4,
        borderWidth: 1,
        borderColor: colors.light_gray,
    },
    footerStyle: {
        flexDirection: 'row',
        flex: 1,
        paddingVertical: 10,
        justifyContent: 'flex-end'
    },
    buttonContainer: {
        position: 'absolute',
        top: 0,
        left: 0,
        right: 0,
        bottom: 0,
        justifyContent: 'center',
        alignItems: 'center',
        flexDirection: 'column',
    },
    buttonStyle: {
        margin: 5,
        backgroundColor: colors.light_green,
        borderRadius: 8,
        height: 50,
        width: '60%',
        alignItems: 'center',
        flexDirection: 'row'
    },
    buttonText: {
        color: colors.white,
        fontSize: 16,
    },
});

但问题是当加载平板列表然后按钮就像这样.enter image description here

一旦加载了平面列表,它就会像这样发生

enter image description here

任何人都可以帮我如何保持按钮在中心,即使正在加载平板列表。

答案

你的styles.container丢失了。

您在该视图上的样式必须具有flex:1或height:'100%'属性

另一答案

以下是代码https://snack.expo.io/@msbot01/supportive-cake的工作示例

示例代码

 import * as React from 'react';
import { Text, View, StyleSheet, TouchableOpacity, FlatList } from 'react-native';
import { Constants } from 'expo';

// You can import from local files
import AssetExample from './components/AssetExample';

// or any pure javascript modules available in npm
import { Card } from 'react-native-paper';

export default class App extends React.Component {

  _renderItem = ({item}) => (
    <View><Text style={{fontSize:80 }}>{item.key}</Text></View>
  );
  _keyExtractor = (item, index) => item.id;
  render() {
            return (
                <View style={{flex:1, backgroundColor:'yellow'}}>
                    <View style={styles.separator} />
                    <View style={{flex:1}}>

                        <FlatList
                            data={[{key: 'a', id:1}, {key: 'b', id:2},{key: 'a', id:3}, {key: 'b', id:4},{key: 'a', id:5}, {key: 'b', id:6},{key: 'a', id:7}, {key: 'b', id:8},{key: 'a', id:9}, {key: 'b', id:10},{key: 'a', id:11}, {key: 'b', id:12},{key: 'a', id:13}, {key: 'b', id:14}]}
                            keyExtractor={this._keyExtractor}
                            renderItem={this._renderItem}
                        />
                        <View style={[styles.buttonContainer]}>
                            <TouchableOpacity style={styles.buttonStyle} >
                                <View style={{ backgroundColor:'red', height:20, width:50 }}>
                                <Text style={styles.buttonText}>SendMessage</Text>
                                </View>
                            </TouchableOpacity>
                        </View>
                    </View>
                </View>
            );
        }
}

const styles = StyleSheet.create({
separator: {
        borderRadius: 4,
        borderWidth: 1,
        borderColor: 'gray',
    },
    buttonContainer: {
        position: 'absolute',
        bottom: 0,
        width:'60%',
        left:'20%',
        right:'20%',
        backgroundColor:'red',
        justifyContent:'center',
        alignItems:'center'
    },
    buttonStyle: {
        margin: 5,
        backgroundColor: 'green',
        borderRadius: 8,
        height: 50,
        width: '60%',
        alignItems: 'center',
        flexDirection: 'row'
    },
    buttonText: {
        color: 'white',
        fontSize: 16,
    }
});

以上是关于如何将按钮与中心对齐以响应本机平面列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在响应本机的平面列表中应用延迟加载

如何居中对齐测验标题中心下方的一组单选按钮并保持响应?

如何将中心的 material-ui 组件与响应行为对齐?

将按钮对齐到 div 的中心

css 快速片段将svg与中心对齐并缩放到视口大小。

如何在本机反应中从平面列表中设置 Json 数组