Як підкреслити текст в Android XML?


108

Як підкреслити текст у XML-файлі? Я не можу знайти варіант в textStyle.


Ви спробуйте скористатисяstyle="text-decoration: underline;"
ρyaσѕρєя K

1
ви могли б у повному обсязі як це використати?
Майкл Зейнер

Ви спробуйте цеtextView.setText(Html.fromHtml("<u>"+"testest"+"</u>"));
ρyaσѕρєя K

Відповіді:


174

Якщо ви використовуєте XML - файл рядок ресурсу (підтримує HTML - теги), це може бути зроблено з допомогою <b> </b>, <i> </i>і <u> </u>.

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

Якщо ви хочете підкреслити щось із використання коду:

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

Сподіваюся, це допомагає


9
Я спробував це. рядок не підкреслюється?
Майкл Зейнер

5
Я натрапив на випадки, коли основні <u>теги не працюють, наприклад, іноді, якщо ви використовуєте нестандартний шрифт. Однак програмне забезпечення, що лежить в основі, UnderlineSpanнасправді ніколи не підводило мене, тому я рекомендував би його як найбільш надійне рішення.
Джуліо Піанкастеллі

Не потрібно встановлювати текст на Java. Просто використовуйте <u>і <\u>в XML, і цього досить.
Максим Дмитрієв

9
у моєму випадку попередній перегляд андроїд-студії не зміг визначити html-тег. але одного разу я запустив проект у реальному пристрої, підкреслений текст, показаний щасливо.
Елвін

1
<whine> той факт, що вам доведеться перетворити рядок у HTML, коли Google вже дає нам жирний / курсив / нормальний, є досить слабким, враховуючи, що у нас Android вже більше 5 років ... </whine>
сердитийITguy

57

Використовуй це:

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

Майте на увазі, що це рішення завжди підкреслює весь текст, тому це неможливо, якщо хочеться підкреслити лише його частину. Для цього вам потрібно UnderlineSpan.
Джуліо Піанкастеллі

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

Якщо це не працює

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

Тому що "<" може бути ключовим словом у певний час.

І для відображення

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

3
Це працює ... але якщо ви з якоїсь причини встановите TextView використовувати атрибут xml android: textAllCaps = "true", підкреслення не з’явиться. Видаліть цей модифікатор, і підкреслення відобразиться за призначенням. Просто голова вгору :)
Matt W

5

Перш за все, зайдіть у файл String.xml

Ви можете додати тут будь-які атрибути HTML, курсив, жирний шрифт або підкреслення.

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

3

Ще один спосіб зробити це - створити спеціальний компонент, що розширює TextView. Це добре для тих випадків, коли потрібно мати кілька підкреслених TextView.

Ось код компонента:

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);
    }
}

І як його використовувати в xml:

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

2

Щоб завершити відповідь Бхавіна. Для прикладу, щоб додати підкреслення або переадресацію.

((TextView) findViewById(R.id.tv_cgu)).setText(Html.fromHtml(getString(R.string.upload_poi_CGU)));

<string name="upload_poi_CGU"><![CDATA[ J\'accepte les <a href="">conditions générales</a>]]></string>

і ви можете знати сумісний тег тут: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html


2

Ви можете використовувати нижче розмітку, але врахуйте , що якщо ви встановите textAllCapsдля trueпідкреслення ефекту буде видалений.

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


Примітка

Використання textAllCaps з рядком (login_change_settings), що містить розмітку; розмітка буде скинута за допомогою перетворення великих літер

Перетворення тексту textAllCaps призведе до виклику toString на CharSequence, що має чистий ефект видалення будь-якої розмітки, наприклад. Цей чек шукає використання рядків, що містять розмітку, які також задають textAllCaps = true.


2

Існує різні способи досягнення підкресленого тексту в Android TextView.

1. <u>This is my underlined text</u> або

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

2.Ви можете зробити те саме програмно.

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

3. Це можна зробити, створивши SpannableString, а потім встановивши його як текстове властивість TextView

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

2

Я використовував метод нижче, він працював на мене. Нижче наводиться приклад для кнопки, але ми можемо використовувати і в TextView.

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

1

Якщо ви хочете порівняти текстовий рядок або текст буде динамічно змінюватися, ви можете створити подання у макеті обмежень, він буде коригуватися відповідно до довжини тексту, як це

 <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);
            }
        }
    }

Найпростіший спосіб

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

Також підтримуйте TextView дітей, таких як EditText, Button, Checkbox

Якщо хочете

- Підкреслити текст, який можна натиснути?

- Підкреслити кілька частин TextView?

Потім перевірте цю відповідь

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.