Làm thế nào để có hiệu ứng Ellipsis trên Văn bản


138

Tôi đang có một văn bản dài trong ứng dụng của mình và tôi cần cắt bớt nó và thêm ba dấu chấm vào cuối.

Làm thế nào tôi có thể làm điều đó trong phần tử React Native Text?

Cảm ơn


1
Bạn đã được đưa ra câu trả lời hoàn hảo. Có lẽ bạn nên chấp nhận nó?
Moss Palmer

Câu trả lời:


33

sử dụng numberOfLines

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

hoặc nếu bạn biết / hoặc có thể tính số ký tự tối đa trên mỗi hàng, chuỗi con JS có thể được sử dụng.

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

84
Đó không phải là một giải pháp. Văn bản có chiều rộng thay đổi.
Marc

2
Miễn là vùng chứa của phần tử Văn bản có giá trị Flex (tôi sử dụng, 1), văn bản sẽ bị cắt ngắn trong vùng chứa. Vì vậy, câu trả lời của @Rahul Chaudhari là cách để làm điều đó.
vào

numberOfLines = {1}
mayaa

1
Liên kết được cung cấp bị hỏng và giải pháp nên được sử dụng để hỗ trợ tích hợp sẵn cho phản ứng này được giải thích trong các câu trả lời khác.
Tyler

402

Sử dụng numberOfLinestham số trên một Textthành phần:

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

Sẽ sản xuất:

long long long…

(Giả sử bạn có thùng chứa chiều rộng ngắn.)


Sử dụng ellipsizeModetham số để di chuyển dấu chấm lửng sang headhoặc middle. taillà giá trị mặc định.

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

Sẽ sản xuất:

…long long text

LƯU Ý: Thành Textphần cũng phải bao gồm style={{ flex: 1 }}khi dấu chấm lửng cần được áp dụng tương ứng với kích thước của thùng chứa của nó. Hữu ích cho bố trí hàng, vv


19
Có lẽ rõ ràng có thể không, cần phải xác định chiều rộng trên Văn bản là tốt.
Sten Manyow

Câu hỏi thú vị là: làm thế nào để bạn tính toán số dòng? Bởi vì tôi đoán không ai từng biết trước về nó (vì nó không có lý do gì để tĩnh).
cglacet

1
Câu trả lời hay, nhưng nếu muốn hành vi tương tự như dấu chấm lửng css, cần sử dụng ellipsizeMode = 'tail' .
Andrey Patseiko

@RanYefet bạn nên xem việc đánh dấu câu trả lời này là câu trả lời đúng, nó sẽ giúp người khác, cảm ơn!
Balthazar

@Goutham Gần nhất bạn sẽ nhận được là ellipsizeMode được đặt ở giữa tôi nghĩ.
Henrik Hansen

65

Bạn có thể sử dụng ellipsizeMode và numberOfLines. ví dụ

<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
Miễn là vùng chứa của phần tử Văn bản có giá trị Flex (tôi sử dụng, 1), văn bản sẽ bị cắt ngắn trong vùng chứa.
vào

3
ellipsizeMode = 'tail' là không cần thiết vì 'tail' là giá trị mặc định cho ellipsizeMode. Trừ khi bạn muốn hiển thị hình elip ở đầu văn bản, bạn có thể sử dụng chỉ số propOfLines và nó sẽ hoạt động.
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>

Kết quả: 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
câu hỏi liên quan nhiều hơn đến React Native, trong đó textOverflow không phải là chỗ dựa hợp lệ
Brian Nguyễn
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.