ReactNative: làm thế nào để trung tâm văn bản?


212

Làm cách nào để căn giữa Văn bản trong ReactNative cả theo chiều ngang và dọc?

Tôi có một ứng dụng ví dụ trong rnplay.org trong đó justifyContent = "centre"alignItems = "centre" không hoạt động: https://rnplay.org/apps/AoxNKQ

Các văn bản nên được tập trung. Và tại sao có một lề ở trên cùng giữa văn bản (màu vàng) và thùng chứa cha?

Mã số:

'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;

Như thế này: rnplay.org/apps/1hbnSA ?
Cherniv

đây không phải là trung tâm theo chiều ngang
vào

1
ok, vậy đây: rnplay.org/apps/1hbnSA , đã cập nhật
Cherniv

WAAAA ... văn bản Align? tôi biết nó sẽ là một cái gì đó thực sự ngu ngốc .... bạn nên đăng nó như một câu trả lời
vào

Câu trả lời:


356

Từ headline'loại bỏ phong cách height, justifyContentalignItems. Nó sẽ tập trung văn bản theo chiều dọc. Thêm textAlign: 'center'và nó sẽ tập trung văn bản theo chiều ngang.

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

16
Không làm việc với một widthtrừ khi bạn bọc nó trong một <View>vớijustifyContent: 'center', alignItems: 'center',
Ryan Walker

59

Đã trả lời nhưng tôi muốn thêm một chút về chủ đề và các cách khác nhau để làm điều đó tùy thuộc vào trường hợp sử dụng của bạn.

Bạn có thể thêm adjustsFontSizeToFit={true}(hiện không có giấy tờ) vào TextThành phần để tự động điều chỉnh kích thước bên trong nút cha.

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

Bạn cũng có thể thêm phần sau vào Thành phần văn bản của mình:

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

Hoặc bạn có thể thêm phần sau vào cha mẹ của thành phần Văn bản:

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

hoặc cả hai

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

hoặc cả ba

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

Tất cả phụ thuộc vào những gì bạn đang làm. Bạn cũng có thể kiểm tra bài viết đầy đủ của tôi về chủ đề này

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


điều này nên được mong đợi: <Text style = {{textAlignV vertical: "centre", textAlign: "centre",}}> Hiiiz </ Text>
Tushar Pandey

người đàn ông bạn đã tiết kiệm 1,5 giờ của tôi. Tôi đã cố gắng làm tương tự nhưng không thể cho đến khi câu trả lời này là : textAlignVertical: "center", textAlign: "center" , như Kiểu văn bản <Text />.
ganeshdeshmukh

textAlignV vertical chỉ dành cho Android. Không có giải pháp nào trong số này sắp xếp văn bản của tôi theo chiều dọc, chỉ theo chiều ngang.
sudo

14

Đặt các kiểu này thành thành phần hình ảnh: {textAlignV vertical: "centre", textAlign: "centre"}



9

đây là một ví dụ cho căn chỉnh ngangdọc

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

Cảm ơn vì mẹo rằng các kiểu nội tuyến phải được đặt trong {{double-xoăn-braces}}.
MarkHu

6

Căn chỉnh trung tâm ngangdọc

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

Chỉ có giải pháp phù hợp với tôi về việc định tâm <Văn bản> bên trong <Chế độ xem> không chỉ theo chiều ngang mà còn theo chiều dọc. Cảm ơn bạn!
RuntimeError

4

Bạn có thể sử dụng thuộc alignSelftính trên thành phần Văn bản

{ alignSelf : "center" }

4

Bất cứ nơi nào bạn có Textthành phần trong trang của mình, bạn chỉ cần đặt kiểu của Textthành phần đó.

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

bạn không cần thêm bất kỳ thuộc tính tạo kiểu nào khác, đây là phép thuật ngoạn mục, nó sẽ đặt bạn văn bản ở giữa giao diện người dùng của bạn.


2

Thêm đơn giản

textAlign: "center"

trong styleSheet của bạn, đó là nó. Hy vọng điều này sẽ giúp.

chỉnh sửa: "trung tâm"


2

Các tài sản sau đây có thể được sử dụng: {{alignItems: 'center'}}

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

1
Ngay cả khi đây có thể là giải pháp cho câu hỏi, xin vui lòng thêm một số giải thích để tất cả chúng ta có thể tìm hiểu.
hòa

Xin vui lòng, cải thiện nó bởi vì bạn đang sử dụng hai dấu sao để lưu hành chỉnh sửa chính nhưng nó không rõ ràng và phần khác là nhầm lẫn
Frederiko Cesar


1

Ngoài các trường hợp sử dụng được đề cập trong các câu trả lời khác:

Để căn giữa văn bản trong trường hợp sử dụng cụ thể của bottomTabNavigator , hãy nhớ đặt showIcon thành false (ngay cả khi bạn không có biểu tượng trong TabNavigator). Nếu không, văn bản sẽ được đẩy xuống dưới cùng của Tab.

Ví dụ:

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

đầu tiên thêm vào khung nhìn cha mẹ flex: 1, justifyContent: 'centre', alignItems: 'centre'

sau đó trong văn bản thêm textAlign: 'centre'

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.