Metin üzerinde Elips etkisi nasıl elde edilir


140

Uygulamamda uzun bir metin var ve onu kısaltmam ve sonuna üç nokta eklemem gerekiyor.

Bunu React Native Text öğesinde nasıl yapabilirim?

Teşekkürler


1
Size mükemmel cevap verilmiş. Belki de kabul etmelisin?
Moss Palmer

Yanıtlar:


32

numberOfLines kullanın

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

veya satır başına maksimum karakter sayısını biliyorsanız / veya hesaplayabiliyorsanız, JS alt dizesi kullanılabilir.

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

85
Bu bir çözüm değil. Metin değişken genişliktedir.
Marc

2
Metin öğesinin kapsayıcısı Flex değerine sahip olduğu sürece (kullanıyorum, 1), metin kapsayıcı içinde kesilecektir. Yani @Rahul Chaudhari'nin cevabı bunu yapmanın yolu.
doğum zamanı

numberOfLines = {1}
mayaa

1
Sağlanan bağlantı kopmuştur ve çözüm, diğer yanıtlarda açıklanan react-native'in yerleşik desteğini kullanmak olmalıdır.
Tyler

408

numberOfLinesParametreyi bir Textbileşende kullanın :

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

Üretecek:

long long long…

(Kısa genişlikli kabınız olduğunu varsayarsak.)


ellipsizeModeÜç noktayı headveya öğesine taşımak için parametreyi kullanın middle. tailvarsayılan değerdir.

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

Üretecek:

…long long text

Not:Text bileşen de içermelidir style={{ flex: 1 }}üç nokta da, kabın boyutuna uygulanan göreli olarak gerektiğinde. Sıra düzenleri vb. İçin kullanışlıdır.


19
Belki bariz belki değil, Metin üzerinde de genişlik belirtmeniz gerekiyor.
Sten Muchow

İlginç soru şudur: çizgi sayısını nasıl hesaplarsınız? Çünkü sanırım kimse bunu önceden bilmiyor (çünkü statik olması için bir neden yok).
cglacet

1
Güzel cevap, ancak css elipsleri gibi aynı davranışı istiyorsanız, ellipsizeMode = 'tail' kullanmanız gerekir .
Andrey Patseiko

@RanYefet, bu yanıtı doğru olarak işaretlemeyi düşünmelisiniz, başkalarına yardımcı olur, teşekkürler!
Balthazar

@Goutham Elinize en yakın olanı ellipsizeMode orta olarak ayarlanmış sanırım.
Henrik Hansen

65

EllipsizeMode ve numberOfLines kullanabilirsiniz. Örneğin

<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
Metin öğesinin kapsayıcısı Flex değerine sahip olduğu sürece (kullanıyorum, 1), metin kapsayıcı içinde kesilecektir.
doğum zamanı

3
ellipsizeMode = 'tail', ellipsizeMode için varsayılan değer olduğundan 'tail' gerekli değildir. Metnin başında elips göstermek istemediğiniz sürece, sadece numberOfLines prop kullanabilirsiniz ve çalışmalıdır.
Karan Bhutwala

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>

Sonuç: Lorem ipsum...


-10

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


1
soru daha çok textOverflow'un geçerli bir destek olmadığı React Native ile ilgili
Brian Nguyen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.