วิธีการขีดเส้นใต้ข้อความในการกระพือ


120

วิธีการขีดเส้นใต้ข้อความในกระพือภายในTextวิดเจ็ต?

ดูเหมือนว่าฉันไม่สามารถขีดเส้นใต้fontStyleคุณสมบัติภายในของTextStyle

คำตอบ:


277

เมื่อขีดเส้นใต้ทุกสิ่งคุณสามารถตั้งค่า TextStyle บนวิดเจ็ตข้อความ

ใส่คำอธิบายภาพที่นี่

Text(
  'Hello world',
  style: TextStyle(
    decoration: TextDecoration.underline,
  ),
)

หากคุณต้องการขีดเส้นใต้เฉพาะส่วนของข้อความคุณต้องใช้Text.rich()(หรือวิดเจ็ต RichText) และแบ่งสตริงออกเป็น TextSpans ที่คุณสามารถเพิ่มสไตล์ได้

ใส่คำอธิบายภาพที่นี่

Text.rich(
  TextSpan(
    text: 'Hello ',
    style: TextStyle(fontSize: 50),
    children: <TextSpan>[
      TextSpan(
          text: 'world',
          style: TextStyle(
            decoration: TextDecoration.underline,
          )),
      // can add more TextSpans here...
    ],
  ),
)

TextSpan แปลกนิดหน่อย textพารามิเตอร์เป็นรูปแบบเริ่มต้น แต่childrenรายการมีสไตล์ (และอาจ Unstyled) ข้อความที่ปฏิบัติตามมัน คุณสามารถใช้สตริงว่างtextหากคุณต้องการเริ่มต้นด้วยข้อความที่มีสไตล์

คุณยังสามารถเพิ่ม TextDecorationStyle เพื่อเปลี่ยนลักษณะการตกแต่งได้อีกด้วย นี่คือเส้นประ:

ใส่คำอธิบายภาพที่นี่

Text(
  'Hello world',
  style: TextStyle(
    decoration: TextDecoration.underline,
    decorationStyle: TextDecorationStyle.dashed,
  ),
)

และTextDecorationStyle.dotted:

ใส่คำอธิบายภาพที่นี่

และTextDecorationStyle.double:

ใส่คำอธิบายภาพที่นี่

และTextDecorationStyle.wavy:

ใส่คำอธิบายภาพที่นี่


12
สามารถเพิ่มช่องว่างระหว่างคำและขีดเส้นใต้ได้หรือไม่?
felangga

@felangga นั่นเป็นคำถามที่ดี มันอาจจะเกี่ยวข้องกับพื้นฐาน นั่นคือสิ่งที่ฉันต้องการสำรวจเพิ่มเติม แต่ฉันยังไม่รู้ว่าจะทำอย่างไร สำรวจซอร์สโค้ดและแจ้งให้เราทราบหากคุณเข้าใจ
Suragch

มีปัญหาที่เปิดอยู่สำหรับการเพิ่มช่องว่างระหว่างข้อความและขีดเส้นใต้ github.com/flutter/flutter/issues/30541
Joe Muller

@felangga ดูคำตอบของฉันด้านล่างสำหรับสองวิธีที่ให้คุณเพิ่มช่องว่างระหว่างข้อความและขีดเส้นใต้
Joe Muller

ขอบคุณสำหรับความพยายามและคำอธิบาย
Sana'a Al-ahdal

34

คุณทำได้โดยสมัครdecoration: TextDecoration.underlineกับTextStyleไฟล์Text.

ด้วยตัวอย่างธีม:

          Text(
            "text",
            style: Theme
                .of(context)
                .accentTextTheme
                .subhead
                .copyWith(decoration: TextDecoration.underline),
          )

ตัวอย่างพื้นฐาน:

          Text(
            "text",
            style: TextStyle(decoration: TextDecoration.underline),
          )

3

คุณสามารถใช้ TextDecoration อย่างมีสไตล์เพื่อขีดเส้นใต้ข้อความที่กำหนด

ตัวอย่างเช่น

Text(
    "Your text here",
    style: TextStyle(
        decoration: TextDecoration.underline),
    )
)

3

วิธีแก้ปัญหาที่น่าตื่นเต้น
หากคุณต้องการควบคุมระยะห่างระหว่างข้อความและขีดเส้นใต้คุณสามารถใช้แฮ็คนี้ ในระยะสั้นคุณซ่อนข้อความจริงโดยใช้ Colors.transparent จากนั้นแสดงเงาออฟเซ็ตที่วางอยู่เหนือขีดเส้นใต้ข้อความ

        Text(
            "Forgot Password?",
            style: TextStyle(
              shadows: [
                Shadow(
                    color: Colors.black,
                    offset: Offset(0, -5))
              ],
              color: Colors.transparent,
              decoration:
              TextDecoration.underline,
              decorationColor: Colors.blue,
              decorationThickness: 4,
              decorationStyle:
              TextDecorationStyle.dashed,
            ),
          )

ใส่คำอธิบายภาพที่นี่

ดังที่คุณจะเห็นด้านล่างหากคุณใช้ขีดเส้นใต้ข้อความที่ไม่อยู่ในกรอบข้อความนั้นจะติดอยู่ที่ด้านล่างของข้อความและอาจดูน่าเกลียดเล็กน้อย

โซลูชั่นที่น่าเบื่อ

ใช้เพียงวิดเจ็ตข้อความคุณสามารถเพิ่มขีดเส้นใต้ด้วยสไตล์และสีที่กำหนดเอง:

Text(
  "Forgot Password?",
  style: TextStyle(
    decoration: TextDecoration.underline,
    decorationColor: Colors.blue,
    decorationThickness: 4,
    decorationStyle: TextDecorationStyle.dashed,
   ),
)

ปัญหาเดียวที่ฉันมีกับวิธีนี้คือคุณไม่สามารถควบคุมว่าขีดเส้นใต้จะอยู่ด้านล่างสุดของข้อความได้อย่างไร

ใส่คำอธิบายภาพที่นี่

หากคุณต้องการเพิ่มระยะห่างคุณจะต้องใช้วิธีการที่แปลกใหม่ซึ่งใช้คอนเทนเนอร์และคุณสมบัติการขยาย

Container(
     padding: EdgeInsets.only(
       bottom: 5, // Space between underline and text
     ),
     decoration: BoxDecoration(
         border: Border(bottom: BorderSide(
         color: Colors.amber, 
         width: 1.0, // Underline thickness
        ))
      ),
     child: Text(
        "Forgot Password?",
        style: TextStyle(
        color: Colors.black,
        ),
       ),
      )

ใส่คำอธิบายภาพที่นี่

จับตาดูปัญหา GitHub นี้เพื่อหาวิธีแก้ปัญหาที่ง่ายกว่า


อีกวิธีหนึ่งที่น่าเกลียดโดยใช้เงา final answerStyle = TextStyle (ตกแต่ง: TextDecoration.underline, decorationStyle: TextDecorationStyle.dashed, สี: Colors.transparent, decorationColor: Colors.black, เงา: [Shadow (color: Colors.black, offset: Offset (0, -5)) ],);
Sathish Kumar

มันดีมากขอบคุณ
roun paleum

@ โจฉลาดมาก! ฉันขโมยส่วนหนึ่งของวิธีแก้ปัญหาของคุณและนำไปใช้กับปัญหาของฉันที่นี่ (พยายามให้เครดิตคุณ แต่ไม่ได้เชื่อมโยงไปยังโปรไฟล์ของคุณ): stackoverflow.com/q/65293992/1459653ขอบคุณ!
Mark Gavagan

2

ตัวอย่างเช่น

Text(
  "Terms and Condition",
  style: TextStyle(
    decoration:
        TextDecoration.underline,
    height: 1.5,
    fontSize: 15,
    fontWeight: FontWeight.bold,
    fontFamily: 'Roboto-Regular',
  ),
),
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.