ReactNative: วิธีจัดกึ่งกลางข้อความ?


212

วิธีการจัดกึ่งกลางข้อความใน ReactNative ทั้งในแนวนอนและแนวตั้ง

ฉันมีตัวอย่างแอปพลิเคชันใน rnplay.org โดยที่justifyContent = "center"และalignItems = "center"ไม่ทำงาน: https://rnplay.org/apps/AoxNKQ

ข้อความควรอยู่กึ่งกลาง และทำไมถึงมีระยะห่างระหว่างข้อความ (สีเหลือง) และคอนเทนเนอร์หลัก?

รหัส:

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  Image,
  View,
} = React;

var SampleApp = React.createClass({
  render: function() {
    return (
            <View style={styles.container}>
                <View style={styles.topBox}>
                    <Text style={styles.headline}>lorem ipsum{'\n'}ipsum lorem lorem</Text>

                </View>
                <View style={styles.otherContainer}>
                </View>
            </View>
    );
  }
});

var styles = StyleSheet.create({

    container: {
        flex: 1,
        flexDirection: 'column',
        backgroundColor: 'red',
        justifyContent: 'center',
        alignItems: 'center',
    },

    topBox: {
        flex: 1,
        flexDirection: 'row',
        backgroundColor: 'lightgray',
        justifyContent: 'center',
        alignItems: 'center',
    },
    headline: {
        fontWeight: 'bold',
        fontSize: 18,
    marginTop: 0,
        width: 200,
        height: 80,
    backgroundColor: 'yellow',
        justifyContent: 'center',
        alignItems: 'center',
    },

  otherContainer: {
        flex: 4,
        justifyContent: 'center',
        alignItems: 'center',
    backgroundColor: 'green',
    },


});

AppRegistry.registerComponent('SampleApp', () => SampleApp);

module.exports = SampleApp;

ถูกใจสิ่งนี้: rnplay.org/apps/1hbnSA ?
Cherniv

นี่ไม่ใช่ศูนย์กลางแนวนอน
itinance

1
ตกลงดังนั้นสิ่งนี้: rnplay.org/apps/1hbnSAอัปเดต
Cherniv

WAAAA ... ส่งข้อความเข้าสู่ระบบ? ฉันรู้ว่ามันจะเป็นสิ่งที่โง่จริงๆ .... คุณควรโพสต์สิ่งนี้เป็นคำตอบ
itinance

คำตอบ:


356

จากheadlineสไตล์ลบheight, และjustifyContent alignItemsมันจะจัดกึ่งกลางข้อความในแนวตั้ง เพิ่มtextAlign: 'center'และมันจะจัดกึ่งกลางข้อความในแนวนอน

  headline: {
    textAlign: 'center', // <-- the magic
    fontWeight: 'bold',
    fontSize: 18,
    marginTop: 0,
    width: 200,
    backgroundColor: 'yellow',
  }

16
ใช้งานไม่ได้widthจนกว่าคุณจะห่อหุ้ม<View>ด้วยjustifyContent: 'center', alignItems: 'center',
Ryan Walker

59

ตอบแล้ว แต่ฉันต้องการเพิ่มอีกเล็กน้อยในหัวข้อและวิธีการที่แตกต่างกันไปขึ้นอยู่กับกรณีการใช้งานของคุณ

คุณสามารถเพิ่มadjustsFontSizeToFit={true}(ไม่มีเอกสารในปัจจุบัน) ให้กับTextComponent เพื่อปรับขนาดอัตโนมัติภายในโหนดหลัก

  <Text adjustsFontSizeToFit={true} numberOfLines={1}>Hiiiz</Text>

คุณยังสามารถเพิ่มสิ่งต่อไปนี้ในส่วนประกอบข้อความของคุณ:

<Text style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>

หรือคุณสามารถเพิ่มสิ่งต่อไปนี้ลงในพาเรนต์ของคอมโพเนนต์ Text:

<View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text>Hiiiz</Text>
</View>

หรือทั้งคู่

 <View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>
</View>

หรือทั้งสาม

 <View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text adjustsFontSizeToFit={true} 
           numberOfLines={1} 
           style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>
</View>

ทุกอย่างขึ้นอยู่กับสิ่งที่คุณทำ คุณสามารถเช็คเอาต์โพสต์บล็อกของฉันเต็มในหัวข้อ

https://medium.com/@vygaio/how-to-auto-adjust-text-font-size-to-fit-into-a-nodes-width-in-react-native-9f7d1d68305b


ควรคาดหวังสิ่งนี้: <Text style = {{textAlignVertical: "center", textAlign: "center",}}> Hiiiz </Text>
Tushar Pandey

ผู้ชายที่คุณบันทึกไว้ 1.5 ชั่วโมง ฉันพยายามทำแบบเดียวกัน แต่ทำไม่ได้จนกระทั่งคำตอบนี้เป็น: textAlignVertical: "center", textAlign: "center" , เป็นสไตล์ของ <Text /> Component
ganeshdeshmukh

textAlignVertical เป็น Android เท่านั้น วิธีการแก้ปัญหาเหล่านี้ไม่มีการจัดแนวข้อความของฉันในแนวตั้งเพียงแนวนอน
sudo



9

นี่คือตัวอย่างสำหรับการจัดแนวนอนและแนวตั้งพร้อมกัน

<View style={{width: 200, flexDirection: 'row',alignItems: 'center'}}>
     <Text style={{width: '100%',textAlign: 'center'}} />
</View>

ขอบคุณสำหรับเคล็ดลับที่ต้องอยู่ในรูปแบบอินไลน์ {{double-curly-braces}}
MarkHu

6

การจัดแนวกึ่งกลางและแนวตั้ง

<View style={{flex: 1, justifyContent: 'center',alignItems: 'center'}}>
     <Text> Example Test </Text>
</View>

ทางออกเดียวที่ทำงานสำหรับฉันในแง่ของการจัดกึ่งกลาง <Text> ภายใน <View> ไม่ใช่แค่แนวนอน แต่ยังเป็นแนวตั้ง ขอบคุณ!
RuntimeError


4

ไม่ว่าคุณจะมีTextองค์ประกอบในหน้าของคุณเพียงใดคุณต้องกำหนดสไตล์ของTextองค์ประกอบ

 <Text style={{ textAlign: 'center' }}> Text here </Text>

คุณไม่จำเป็นต้องเพิ่มคุณสมบัติการจัดแต่งทรงผมอื่น ๆ นี่เป็นเวทย์มนตร์ที่น่าทึ่งซึ่งจะทำให้ข้อความของคุณอยู่ตรงกลาง UI ของคุณ


2

เพิ่มง่าย ๆ

textAlign: "center"

ในสไตล์ชีทของคุณนั่นแหล่ะ หวังว่านี่จะช่วยได้

แก้ไข: "ศูนย์"


2

คุณสมบัติต่อไปนี้สามารถใช้ได้: {{alignItems: 'center'}}

<View style={{alignItems: 'center'}}>
 <Text>Hello im centered text{this.props.name}!</Text>
</View>

1
แม้ว่านี่อาจเป็นวิธีแก้ปัญหาของคำถามได้โปรดเพิ่มคำอธิบายเพิ่มเติมเพื่อให้เราทุกคนสามารถเรียนรู้ได้
harmonica141

กรุณาปรับปรุงเพราะคุณใช้เครื่องหมายดอกจันสองตัวเพื่อหมุนเวียนการแก้ไขหลัก แต่ก็ไม่ชัดเจนและส่วนอื่น ๆ ก็สับสน
Frederiko Cesar


2

ตั้งค่าในมุมมองพาเรนต์

justifyContent:center

และในมุมมองย่อย alignSelf: center


กุญแจควรอยู่ในรูปแบบของอูฐjustifyContentและalignSelf
Siddharth

1

นอกเหนือจากกรณีการใช้ที่กล่าวถึงในคำตอบอื่น ๆ :

เมื่อต้องการจัดกึ่งกลางข้อความในกรณีการใช้งานเฉพาะของBottomTabNavigatorอย่าลืมตั้งค่า showIcon เป็น false (แม้ว่าคุณจะไม่มีไอคอนใน TabNavigator) มิฉะนั้นข้อความจะถูกผลักไปที่ด้านล่างของแท็บ

ตัวอย่างเช่น:

const TabNavigator = createBottomTabNavigator({
  Home: HomeScreen,
  Settings: SettingsScreen
}, {
  tabBarOptions: {
    activeTintColor: 'white',
    inactiveTintColor: 'black',
    showIcon: false, //do this
    labelStyle: {
      fontSize: 20,
      textAlign: 'center',
    },
    tabStyle: {
      backgroundColor: 'grey',
      marginTop: 0,
      textAlign: 'center',
      justifyContent: 'center',
      textAlignVertical: "center"
    }
  }

0
const styles = StyleSheet.create({
        navigationView: {
        height: 44,
        width: '100%',
        backgroundColor:'darkgray',
        justifyContent: 'center', 
        alignItems: 'center' 
    },
    titleText: {
        fontSize: 20,
        fontWeight: 'bold',
        color: 'white',
        textAlign: 'center',
    },
})


render() {
    return (
        <View style = { styles.navigationView }>
            <Text style = { styles.titleText } > Title name here </Text>
        </View>
    )

}

0

เพิ่มในมุมมองพาเรนต์มุมมองแรก: 1, justifyContent: 'center', alignItems: 'center'

จากนั้นในข้อความเพิ่ม textAlign: 'center'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.