2012-03-20 39 views
81

Tôi có thể tạo văn bản gạch ngang trong Android, ý tôi là thêm một giá trị đặc biệt vào thẻ TextView có thể làm cho điều này có thể xảy ra không?tạo văn bản gạch ngang trong Android?

<TextView 
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#040404" 
    android:typeface="sans" 
    android:textSize="12dip" 
    android:textStyle="bold"/> 
+0

Hãy thử http://stackoverflow.com/questions/3881553/is-there-an-easy-way-to-strike-through-text-in-an-app-widget –

+0

kiểm tra tại đây https: // stackoverflow .com/a/45186622/835883 – j2emanue

Trả lời

18

thử điều này:

richTextView = (TextView)findViewById(R.id.rich_text); 

    // this is the text we'll be operating on 
    SpannableString text = new SpannableString("Lorem ipsum dolor sit amet"); 

    text.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0); 

    // make "ipsum" (characters 6 to 11) one and a half time bigger than the textbox 
    text.setSpan(new RelativeSizeSpan(1.5f), 6, 11, 0); 

    // make "dolor" (characters 12 to 17) display a toast message when touched 
    final Context context = this; 
    ClickableSpan clickableSpan = new ClickableSpan() { 
     @Override 
     public void onClick(View view) { 
      Toast.makeText(context, "dolor", Toast.LENGTH_LONG).show(); 
     } 
    }; 
    text.setSpan(clickableSpan, 12, 17, 0); 

    // make "sit" (characters 18 to 21) struck through 
    text.setSpan(new StrikethroughSpan(), 18, 21, 0); 

    // make "amet" (characters 22 to 26) twice as big, green and a link to this site. 
    // it's important to set the color after the URLSpan or the standard 
    // link color will override it. 
    text.setSpan(new RelativeSizeSpan(2f), 22, 26, 0); 
    text.setSpan(new URLSpan("http://www.djsad.com"), 22, 26, 0); 
    text.setSpan(new ForegroundColorSpan(Color.GREEN), 22, 26, 0); 

    // make our ClickableSpans and URLSpans work 
    richTextView.setMovementMethod(LinkMovementMethod.getInstance()); 

    // shove our styled text into the TextView   
    richTextView.setText(text, BufferType.SPANNABLE); 
231

Paint.STRIKE_THRU_TEXT_FLAG

TextView someTextView = (TextView) findViewById(R.id.some_text_view); 
someTextView.setText(someString); 
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG); 

Đối với văn bản vẽ, có một số cờ bit cho làm những việc như đậm, in nghiêng, và có gạch ngang. Vì vậy, để cho phép gạch ngang, bạn cần lật bit tương ứng với cờ này. Cách dễ nhất để thực hiện việc này là sử dụng bitwise hoặc trên cờ hiện tại và hằng số tương ứng với một tập hợp cờ chỉ bật cờ strikethrough .

+1

nó thực sự hoạt động, nhưng tôi có thể thay đổi tính thích hợp của nó, nghĩa là kích thước của nó, màu sắc của nó giống như vậy –

+0

Tôi không chắc chắn ... – hovanessyan

+0

nawfal cuteberg, chắc chắn bạn có thể;) – lomza

9

Nó thực sự dễ dàng nếu bạn đang sử dụng chuỗi:

<string name="line"> Not crossed <strike> crossed </strike> </string> 

Và sau đó chỉ cần:

<TextView 
     ... 
     android:text="@string/line" 
/> 
+0

điều này không hiển thị dưới dạng gạch ngang trong trình chỉnh sửa ui, nhưng nó không tấn công văn bản trên thiết bị – yarell

+1

Điều này có thể (và có thể sẽ) không thành công trong API 21+ –

+0

Câu trả lời này có 3 năm. Tôi không chắc liệu điều đó có cần thiết để chỉnh sửa câu trả lời giải thích cho đến khi API hoặc phiên bản nào hữu ích hay không. Nếu có bất kỳ quy tắc trong stackoverflow mà ít nhất là recommed nó, tôi sẽ làm điều đó mà không có vấn đề. –

11

Tôi chỉ cần sao chép answer tôi. Hy vọng nó sẽ giúp cho ai đó Nếu bạn có một từ duy nhất, chúng tôi có thể sử dụng drawable. Sau đây là ví dụ:

<item android:state_pressed="false"><shape android:shape="line"> 
     <stroke android:width="2dp" android:color="#ffffff" /> 
    </shape> 
</item> 

nếu bạn có nhiều dòng bạn có thể sử dụng đoạn mã sau:

TextView someTextView = (TextView) findViewById(R.id.some_text_view); 
someTextView.setText(someString); 
someTextView.setPaintFlags(someTextView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG) 
0

tôi đã cố gắng vài tùy chọn ở trên nhưng, điều này làm việc tốt nhất cho tôi:

String text = "<strike><font color=\'#757575\'>Some text</font></strike>"; 
textview.setText(Html.fromHtml(text)); 

cổ vũ

1

Bạn có thể làm điều này theo ba cách, bằng cách thiết lập tiền cảnh trong TextView hoặc đặt PaintFlag hoặc khai báo chuỗi là <strike>your_string</strike> trong strings.xml. Ví dụ,

Qua PaintFlag

Đây là phương pháp đơn giản bạn chỉ cần thiết lập cờ gạch ngang trên TextView của mình như,

yourTextView.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG); 

nó sẽ tấn công qua TextView của mình.

Qua foreground drawable

Bạn cũng có thể tấn công qua TextView của bạn bằng cách thiết lập một nền tảng như,

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="false"> 
     <shape android:shape="line"> 
      <stroke android:width="1dp" android:color="@android:color/holo_red_dark"/> 
     </shape> 
    </item> 
</selector> 

Bây giờ, bạn chỉ cần thiết lập trên drawable trong TextView của mình làm nền.

Qua strings.xml

Trong phương pháp này, bạn phải khai báo chuỗi của bạn trong strings.xml như tấn công thông qua như,

<string name="strike_line"> <strike>This line is strike throughed</strike></string> 

Note

Nhưng tôi khuyên bạn nên tấn công thông qua TextView của bạn bằng cách thiết lập drawground nền trước. Bởi vì thông qua drawable bạn có thể dễ dàng thiết lập cảnh cáo của bạn thông qua màu sắc dòng (giống như tôi đã giải quyết như màu đỏ trong ví dụ trên) hoặc kích thước hoặc bất kỳ tài sản phong cách khác. Trong khi trong hai phương pháp khác, textcolor mặc định là tấn công thông qua màu sắc.

Các vấn đề liên quan