Como ter efeito de reticências no texto


138

Estou com um texto longo no meu aplicativo e preciso truncá-lo e adicionar três pontos ao final.

Como posso fazer isso no elemento React Native Text?

obrigado


1
Você recebeu a resposta perfeita. Talvez você deva aceitar?
Moss Palmer

Respostas:


33

use numberOfLines

https://rnplay.org/plays/ImmKkA/edit

ou se você souber / ou puder calcular a contagem máxima de caracteres por linha, poderá ser usada a substring JS.

<Text>{ ((mytextvar).length > maxlimit) ? 
    (((mytextvar).substring(0,maxlimit-3)) + '...') : 
    mytextvar }
</Text>

84
Isso não é uma solução. O texto tem largura variável.
Marc

2
Desde que o contêiner do elemento Text tenha um valor Flex (eu uso 1), o texto será truncado dentro do contêiner. Portanto, a resposta de @Rahul Chaudhari é a maneira de fazê-lo.
fostertime

numberOfLines = {1}
mayaa 15/08/17

1
O link fornecido está quebrado e a solução deve ser usar o suporte interno do react-native para isso, o que é explicado em outras respostas.
Tyler

403

Use o numberOfLinesparâmetro em um Textcomponente:

<Text numberOfLines={1}>long long long long text<Text>

Vai produzir:

long long long…

(Supondo que você tenha um contêiner de largura curta.)


Use o ellipsizeModeparâmetro para mover as reticências para headou middle. tailé o valor padrão.

<Text numberOfLines={1} ellipsizeMode='head'>long long long long text<Text>

Vai produzir:

…long long text

NOTA: O Textcomponente também deve incluir style={{ flex: 1 }}quando as reticências precisam ser aplicadas em relação ao tamanho do seu contêiner. Útil para layouts de linhas, etc.


19
Talvez óbvio, talvez não, precise especificar a largura do texto também.
Sten Muchow

A questão interessante é: como você calcula o número de linhas? Porque eu acho que ninguém nunca sabe disso com antecedência (já que não tem razão para ser estático).
Cglacet

1
Boa resposta, mas se quiser o mesmo comportamento como elipses css, será necessário usar ellipsizeMode = 'tail' .
Andrey Patseiko

@RanYefet, considere marcar essa resposta como a correta, isso ajudaria os outros, obrigado!
Balthazar

@ Goutham O mais próximo que você vai chegar é o ellipsizeMode no meio, eu acho.
Henrik Hansen

65

Você pode usar ellipsizeMode e numberOfLines. por exemplo

<Text ellipsizeMode='tail' numberOfLines={2}>
  This very long text should be truncated with dots in the beginning.
</Text>

https://facebook.github.io/react-native/docs/text.html


3
Desde que o contêiner do elemento Text tenha um valor Flex (eu uso 1), o texto será truncado dentro do contêiner.
fostertime

3
ellipsizeMode = 'tail' não é necessário, pois 'tail' é o valor padrão para ellipsizeMode. A menos que você queira mostrar a elipse no início do texto, você pode usar apenas o numberOfLines prop e deve funcionar.
Karan Bhutwala 31/01

17
<View 
   style={{
        flexDirection: 'row',
        padding: 10,
    }}
>
  <Text numberOfLines={5} style={{flex:1}}>
       This is a very long text that will overflow on a small device This is a very 
       long text that will overflow on a small deviceThis is a very long text that 
       will overflow on a small deviceThis is a very long text that will overflow 
       on a small device
  </Text>
</View>

0
<Text ellipsizeMode='tail' numberOfLines={2} style={{width:100}}>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam at cursus 
</Text>

Resultado: Lorem ipsum...


-9

const styles = theme => ({
 contentClass:{
    overflow: 'hidden',
    textOverflow: 'ellipsis',
    display: '-webkit-box',
    WebkitLineClamp:1,
    WebkitBoxOrient:'vertical'
 }   
})
render () {
  return(
    <div className={classes.contentClass}>
      {'content'}
    </div>
  )
}


1
a pergunta é mais sobre React Native, onde textOverflow não é um suporte válido
Brian Nguyen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.