วิธีการมีเอฟเฟกต์ Ellipsis บนข้อความ


140

ฉันมีข้อความยาว ๆ ในแอพของฉันและฉันจำเป็นต้องตัดทอนและเพิ่มจุดสามจุดต่อท้าย

ฉันจะทำเช่นนั้นในองค์ประกอบ React Native Text ได้อย่างไร

ขอบคุณ


1
คุณได้รับคำตอบที่สมบูรณ์แบบ บางทีคุณควรจะยอมรับมัน?
Moss Palmer

คำตอบ:


33

ใช้ numberOfLines

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

หรือหากคุณทราบ / หรือสามารถคำนวณจำนวนอักขระสูงสุดต่อแถวได้ก็อาจใช้สตริงย่อย JS

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

85
นั่นไม่ใช่วิธีแก้ปัญหา ข้อความมีความกว้างตัวแปร
Marc

2
ตราบใดที่คอนเทนเนอร์ขององค์ประกอบ Text มีค่า Flex (ฉันใช้ 1) ข้อความจะถูกตัดทอนภายในคอนเทนเนอร์ ดังนั้นคำตอบของ @Rahul Chaudhari คือวิธีที่จะทำ
fostertime

numberOfLines = {1}
mayaa

1
ลิงก์ที่ให้มาใช้งานไม่ได้และวิธีแก้ปัญหาควรใช้การสนับสนุนในตัวของ react-native สำหรับสิ่งนี้ซึ่งอธิบายไว้ในคำตอบอื่น ๆ
Tyler

410

ใช้numberOfLinesพารามิเตอร์กับTextส่วนประกอบ:

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

จะผลิต:

long long long…

(สมมติว่าคุณมีคอนเทนเนอร์ที่มีความกว้างสั้น)


ใช้ellipsizeModeพารามิเตอร์ที่จะย้ายจุดไข่ปลาไปหรือhead เป็นค่าเริ่มต้นmiddletail

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

จะผลิต:

…long long text

หมายเหตุ:Textองค์ประกอบยังควรรวมถึงstyle={{ flex: 1 }}เมื่อความต้องการจุดไข่ปลาจะนำมาใช้เมื่อเทียบกับขนาดของภาชนะของตน มีประโยชน์สำหรับการจัดวางแถว ฯลฯ


19
อาจจะชัดเจนอาจจะไม่จำเป็นต้องระบุความกว้างบนข้อความด้วย
Sten Muchow

คำถามที่น่าสนใจคือคุณคำนวณจำนวนบรรทัดได้อย่างไร? เพราะฉันเดาว่าไม่มีใครรู้ล่วงหน้า (เนื่องจากไม่มีเหตุผลที่จะคงที่)
cglacet

1
คำตอบที่ดี แต่ถ้าต้องการพฤติกรรมเช่นเดียวกับจุด CSS, จำเป็นต้องใช้ellipsizeMode = 'หาง'
Andrey Patseiko

@RanYefet คุณควรพิจารณาทำเครื่องหมายคำตอบนี้ว่าถูกต้องจะช่วยให้ผู้อื่นขอบคุณ!
Balthazar

@Goutham สิ่งที่ใกล้เคียงที่สุดที่คุณจะได้รับคือ ellipsizeMode ที่ตั้งค่าเป็นกลางฉันคิดว่า
Henrik Hansen

66

คุณสามารถใช้ ellipsizeMode และ numberOfLines เช่น

<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
ตราบใดที่คอนเทนเนอร์ขององค์ประกอบ Text มีค่า Flex (ฉันใช้ 1) ข้อความจะถูกตัดทอนภายในคอนเทนเนอร์
fostertime

3
ellipsizeMode = 'tail' ไม่จำเป็นเนื่องจาก 'tail' เป็นค่าเริ่มต้นสำหรับ ellipsizeMode ถ้าคุณไม่ต้องการแสดงวงรีที่จุดเริ่มต้นของข้อความคุณสามารถใช้เพียงแค่ numberOfLines prop และควรใช้งานได้
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>

ผลลัพธ์: 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
คำถามเป็นข้อมูลเพิ่มเติมเกี่ยวกับ React Native โดยที่ textOverflow ไม่ใช่ข้อเสนอที่ถูกต้อง
Brian Nguyen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.