Làm cách nào để bạn gạch chân một văn bản trong Android XML?


108

Làm cách nào để bạn gạch dưới văn bản trong tệp XML? Tôi không thể tìm thấy một tùy chọn trong textStyle.


bạn đã thử sử dụngstyle="text-decoration: underline;"
ρяσѕρєя K

1
bạn có thể nên làm thế nào để sử dụng nó?
Michael Zeuner

bạn đã thử cái nàytextView.setText(Html.fromHtml("<u>"+"testest"+"</u>"));
ρяσѕρєя K

Câu trả lời:


174

Nếu bạn đang sử dụng một tập tin xml nguồn string (hỗ trợ thẻ HTML), nó có thể được thực hiện bằng <b> </b>, <i> </i><u> </u>.

<resources>
    <string name="your_string_here">
        This is an <u>underline</u>.
    </string>
</resources>

Nếu bạn muốn gạch chân điều gì đó từ việc sử dụng mã:

TextView tv = (TextView) view.findViewById(R.id.tv);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tv.setText(content);

Hi vọng điêu nay co ich


9
Tôi đã thử cái này. chuỗi không xuất hiện gạch chân?
Michael Zeuner

5
Tôi đã gặp các trường hợp khi các <u>thẻ cơ bản không hoạt động, ví dụ: đôi khi nếu bạn đang sử dụng phông chữ tùy chỉnh. Tuy nhiên, cơ bản theo lập trình UnderlineSpanthực sự chưa bao giờ thất bại đối với tôi, vì vậy tôi muốn giới thiệu nó như là giải pháp đáng tin cậy nhất.
Giulio Piancastelli

Bạn không cần đặt văn bản trong Java. Chỉ cần sử dụng <u><\u>trong XML, vậy là đủ.
Maksim Dmitriev

9
trong trường hợp của tôi, bản xem trước android studio không thể xác định thẻ html. nhưng khi tôi chạy dự án trên thiết bị thực, văn bản được gạch chân hiển thị vui vẻ.
Alvin

1
<whine> việc bạn phải chuyển đổi một chuỗi sang HTML khi Google đã cho chúng ta chữ in đậm / nghiêng / bình thường là một điều khá khó khăn khi xem xét chúng ta đã sử dụng Android được hơn 5 năm ... </whine>
phẫn nộITguy

57

Dùng cái này:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

Hãy lưu ý rằng giải pháp này luôn gạch dưới toàn bộ văn bản, vì vậy sẽ không khả thi nếu người ta chỉ muốn gạch dưới một phần của nó. Đối với điều đó, bạn cần UnderlineSpan.
Giulio Piancastelli

25
<resource>
    <string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

Nếu nó không hoạt động thì

<resource>
<string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string>

Bởi vì "<" có thể là một từ khóa tại một thời điểm nào đó.

Và để hiển thị

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.your_string_here)));

3
Điều này hoạt động ... nhưng nếu vì lý do nào đó bạn đặt TextView sử dụng thuộc tính xml android: textAllCaps = "true", thì phần gạch dưới sẽ không xuất hiện. Loại bỏ công cụ sửa đổi này và phần gạch dưới sẽ hiển thị như dự kiến. Chỉ cần một người đứng đầu lên :)
Matt W

5

Trước hết, hãy truy cập tệp String.xml

bạn có thể thêm bất kỳ thuộc tính HTML nào như in nghiêng hoặc in đậm hoặc gạch dưới tại đây.

    <resources>
        <string name="your_string_here">This is an <u>underline</u>.</string>
    </resources>

3

Một cách khác để làm điều đó, là tạo một thành phần tùy chỉnh mở rộng TextView. Nó tốt cho những trường hợp bạn cần có nhiều TextView được gạch chân.

Đây là mã cho thành phần:

package com.myapp.components;

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;

public class LinkTextView extends AppCompatTextView {
    public LinkTextView(Context context) {
        this(context, null);
    }

    public LinkTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        SpannableString content = new SpannableString(text);
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);

        super.setText(content, type);
    }
}

Và cách sử dụng nó trong xml:

<com.myapp.components.LinkTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />


2

Bạn có thể sử dụng đánh dấu dưới đây, nhưng lưu ý rằng nếu bạn thiết lập textAllCapsđể truetác dụng gạch dưới sẽ được gỡ bỏ.

<resource>
    <string name="my_string_value">I am <u>underlined</u>.</string>
</resources>


Ghi chú

Sử dụng textAllCaps với một chuỗi (login_change_settings) có chứa đánh dấu; đánh dấu sẽ bị giảm do chuyển đổi giới hạn

Biến đổi văn bản textAllCaps sẽ kết thúc việc gọi toString trên CharSequence, có tác dụng thực sự là xóa bất kỳ đánh dấu nào chẳng hạn như. Kiểm tra này tìm cách sử dụng các chuỗi có chứa đánh dấu cũng chỉ định textAllCaps = true.


2

Có nhiều cách khác nhau để đạt được văn bản được gạch chân trong Android TextView.

1. <u>This is my underlined text</u> hoặc

I just want to underline <u>this</u> word

2.Bạn có thể làm điều tương tự theo lập trình.

`textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);`

3.Có thể được thực hiện bằng cách tạo một SpannableString và sau đó đặt nó làm thuộc tính văn bản TextView

SpannableString text = new SpannableString("Voglio sottolineare solo questa parola");
text.setSpan(new UnderlineSpan(), 25, 6, 0);
textView.setText(text);

2

Tôi đã sử dụng phương pháp dưới đây, nó làm việc cho tôi. Dưới đây là ví dụ cho Button nhưng chúng ta cũng có thể sử dụng trong TextView.

Button btnClickMe = (Button) findViewById(R.id.btn_click_me);
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

1

Nếu bạn muốn so sánh chuỗi văn bản hoặc văn bản sẽ thay đổi động thì bạn có thể tạo một dạng xem trong bố cục Constraint, nó sẽ điều chỉnh theo độ dài văn bản như thế này

 <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:text="Last Month Rankings"
        android:textColor="@color/colorBlue"
        android:textSize="15sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:layout_width="0dp"
        android:layout_height="0.7dp"
        android:background="@color/colorBlue"
        app:layout_constraintEnd_toEndOf="@+id/txt_Previous"
        app:layout_constraintStart_toStartOf="@+id/txt_Previous"
        app:layout_constraintBottom_toBottomOf="@id/txt_Previous"/>


</android.support.constraint.ConstraintLayout>

0
public void setUnderLineText(TextView tv, String textToUnderLine) {
        String tvt = tv.getText().toString();
        int ofe = tvt.indexOf(textToUnderLine, 0);

        UnderlineSpan underlineSpan = new UnderlineSpan();
        SpannableString wordToSpan = new SpannableString(tv.getText());
        for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
            ofe = tvt.indexOf(textToUnderLine, ofs);
            if (ofe == -1)
                break;
            else {
                wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
            }
        }
    }

Cách dễ dàng nhất

TextView tv = findViewById(R.id.tv);
tv.setText("some text");
setUnderLineText(tv, "some");

Đồng thời hỗ trợ các phần tử con của TextView như EditText, Button, Checkbox

Nếu bạn muốn

- Văn bản gạch chân có thể nhấp?

- Gạch chân nhiều phần của TextView?

Sau đó kiểm tra câu trả lời này

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.