ReactNative: jak wyśrodkować tekst?

212

Jak wyśrodkować tekst w ReactNative zarówno w poziomie, jak i w pionie?

Mam przykładową aplikację w rnplay.org, w której justifyContent = „center” i alignItems = „center” nie działa: https://rnplay.org/apps/AoxNKQ

Tekst powinien być wyśrodkowany. I dlaczego u góry między tekstem (żółty) a kontenerem macierzystym jest margines?

Kod:

'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;
itinance
źródło
Jak to: rnplay.org/apps/1hbnSA ?
Czerniow
to nie jest wyśrodkowane poziomo
itinance
1
ok, więc to: rnplay.org/apps/1hbnSA , zaktualizowano
Czerniow
WAAAA ... textAlign? Wiedziałem, że to byłoby coś naprawdę głupiego .... powinieneś opublikować to jako odpowiedź
itinance

Odpowiedzi:

356

Od headline"styl usuń height, justifyContenta alignItems. Wyśrodkuje tekst pionowo. Dodaj textAlign: 'center'i wyśrodkuje tekst w poziomie.

  headline: {
    textAlign: 'center', // <-- the magic
    fontWeight: 'bold',
    fontSize: 18,
    marginTop: 0,
    width: 200,
    backgroundColor: 'yellow',
  }
Czerniow
źródło
16
Nie działa z widthchyba owinąć go w <View>przyjustifyContent: 'center', alignItems: 'center',
Ryan Walker
59

Już odpowiedziałem, ale chciałbym dodać trochę więcej na ten temat i różne sposoby na zrobienie tego w zależności od przypadku użycia.

Możesz dodać adjustsFontSizeToFit={true}(obecnie nieudokumentowane) do TextComponent, aby automatycznie dopasować rozmiar w węźle nadrzędnym.

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

Możesz również dodać następujące elementy w swoim Składniku tekstowym:

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

Lub możesz dodać następujące elementy do elementu nadrzędnego komponentu Text:

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

lub oba

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

lub wszystkie trzy

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

Wszystko zależy od tego, co robisz. Możesz także sprawdzić mój pełny post na blogu na ten temat

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

garrettmac
źródło
należy się tego spodziewać: <Text style = {{textAlignVertical: „center”, textAlign: „center”,}}> Hiiiz </Text>
Tushar Pandey
człowieku, uratowałeś mi 1,5 godziny. Próbowałem zrobić to samo, ale nie mogłem do tej odpowiedzi jak:, textAlignVertical: "center", textAlign: "center" jako <Tekst /> Styl komponentu.
ganeshdeshmukh
textAlignVertical jest tylko na Androida. Żadne z tych rozwiązań nie wyrównuje mojego tekstu w pionie, tylko w poziomie.
sudo
14

Ustaw te style na komponent obrazu: {textAlignVertical: „center”, textAlign: „center”}

mocanSergiu666
źródło
13
textAlignVertical: "center"

to prawdziwa magia.

Muzammil
źródło
9

jest to przykład jednoczesnego wyrównania w poziomie i pionie

<View style={{width: 200, flexDirection: 'row',alignItems: 'center'}}>
     <Text style={{width: '100%',textAlign: 'center'}} />
</View>
Bashirpour
źródło
Dzięki za wskazówkę, że style wstawiane muszą być zawarte w {{double-curly-nawiasy klamrowe}}.
MarkHu,
6

Poziome i pionowe wyrównanie do środka

<View style={{flex: 1, justifyContent: 'center',alignItems: 'center'}}>
     <Text> Example Test </Text>
</View>
Bashirpour
źródło
Jedyne rozwiązanie, które działało dla mnie pod względem centrowania <Tekstu> wewnątrz <Widoku> nie tylko w poziomie, ale także w pionie. Dziękuję Ci!
RuntimeError
4

Możesz użyć alignSelfwłaściwości składnika Text

{ alignSelf : "center" }
Meenu Negi
źródło
4

Gdziekolwiek masz Textkomponent na swojej stronie, musisz ustawić styl Textkomponentu.

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

nie musisz dodawać żadnych innych właściwości stylizacji, jest to spektakularna magia, która ustawi tekst na środku interfejsu użytkownika.

Hardik Virani
źródło
2

Proste dodawanie

textAlign: "center"

w twoim stylu Arkusz, to wszystko. Mam nadzieję, że to pomoże.

edycja: „centrum”

Raghib Arshi
źródło
2

Można użyć następującej właściwości: {{alignItems: 'center'}}

<View style={{alignItems: 'center'}}>
 <Text>Hello im centered text{this.props.name}!</Text>
</View>
Omar Bakhsh
źródło
1
Nawet jeśli może to być rozwiązanie pytania, prosimy o dodatkowe wyjaśnienie, abyśmy mogli się uczyć.
harmonijka ustna 1
Popraw go, ponieważ używasz dwóch gwiazdek do rozesłania głównej korekty, ale nie jest to jasne, a druga część jest zagmatwana
Frederiko Cesar
2

używany

textalign: center

na widok

Sanjib Suna
źródło
2

Ustaw w widoku rodzica

justifyContent:center

oraz w widoku podrzędnym alignSelf: center

Sanson Jib
źródło
Klucze powinny znajdować się w futerale wielbłąda justifyContentialignSelf
Siddharth
1

Oprócz przypadków użycia wymienionych w innych odpowiedziach:

Aby wyśrodkować tekst w konkretnym przypadku użycia BottomTabNavigator , pamiętaj, aby ustawić showIcon na false (nawet jeśli nie masz ikon w TabNavigator). W przeciwnym razie tekst zostanie przesunięty w kierunku dolnej części Tab.

Na przykład:

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"
    }
  }
Gunnar Karlsson
źródło
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>
    )

}
Giang
źródło
0

najpierw dodaj w widoku nadrzędnym flex: 1, justifyContent: 'center', alignItems: 'center'

następnie w tekście dodaj tekstAlign: 'center'


źródło