Bagaimana Anda menggarisbawahi teks di XML Android?

108

Bagaimana Anda menggarisbawahi teks dalam file XML? Saya tidak dapat menemukan opsi di textStyle.

Michael Zeuner
sumber
kamu telah mencoba menggunakanstyle="text-decoration: underline;"
ρяσѕρєя K
1
bisakah Anda secara lengkap menggunakan itu?
Michael Zeuner
kamu telah mencoba initextView.setText(Html.fromHtml("<u>"+"testest"+"</u>"));
ρяσѕρєя K

Jawaban:

174

Jika Anda menggunakan file xml sumber daya string (mendukung tag HTML), ini dapat dilakukan dengan <b> </b>, <i> </i>dan <u> </u>.

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

Jika Anda ingin menggarisbawahi sesuatu dari penggunaan kode:

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

Semoga ini membantu

George Artemiou
sumber
9
Saya mencoba ini. string tidak muncul digarisbawahi?
Michael Zeuner
5
Saya telah menjumpai kasus ketika mendasari melalui <u>tag tidak berfungsi, misalnya terkadang jika Anda menggunakan font khusus. Namun, mendasari secara terprogram oleh UnderlineSpanmemang tidak pernah gagal pada saya, jadi saya akan merekomendasikannya sebagai solusi yang paling dapat diandalkan.
Giulio Piancastelli
Anda tidak perlu menyetel teks di Java. Cukup gunakan <u>dan <\u>dalam XML, dan itu sudah cukup.
Maksim Dmitriev
9
dalam kasus saya, pratinjau studio android tidak dapat menentukan tag html. tetapi begitu saya menjalankan proyek di perangkat nyata, teks yang digarisbawahi ditampilkan dengan gembira.
Alvin
1
<whine> fakta bahwa Anda harus mengonversi string menjadi HTML ketika Google telah memberi kami huruf tebal / miring / normal adalah hal yang lumayan mengingat kami telah menggunakan Android selama lebih dari 5 tahun ... </
whine
57

Gunakan ini:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
abh22ishek.dll
sumber
Ketahuilah bahwa solusi ini selalu menggarisbawahi keseluruhan teks, jadi tidak mungkin jika seseorang ingin menggarisbawahi hanya sebagian saja. Untuk itu, Anda membutuhkannya UnderlineSpan.
Giulio Piancastelli
25
<resource>
    <string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

Jika tidak berhasil maka

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

Karena "<" bisa menjadi kata kunci pada suatu saat.

Dan untuk Menampilkan

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.your_string_here)));
Bhavin
sumber
3
Ini berfungsi ... tetapi jika karena alasan tertentu Anda menyetel TextView untuk menggunakan atribut xml android: textAllCaps = "true", garis bawah tidak akan muncul. Hapus pengubah ini dan garis bawah akan ditampilkan sebagaimana mestinya. Hanya kepala saja :)
Matt W
5

Pertama-tama, buka file String.xml

Anda dapat menambahkan atribut HTML seperti, miring atau tebal atau garis bawah di sini.

    <resources>
        <string name="your_string_here">This is an <u>underline</u>.</string>
    </resources>
Zar E Ahmer
sumber
3

Cara lain untuk melakukannya, adalah membuat komponen kustom yang memperluas TextView. Ini bagus untuk kasus di mana Anda perlu memiliki beberapa TextView yang digarisbawahi.

Berikut kode untuk komponen tersebut:

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

Dan cara menggunakannya di xml:

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

Untuk melengkapi jawaban Bhavin. Misalnya, untuk menambahkan garis bawah atau pengalihan.

((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>

dan Anda dapat mengetahui tag yang kompatibel di sini: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html

Anthone
sumber
2

Anda dapat menggunakan markup di bawah ini, tetapi perhatikan bahwa jika Anda menyetel textAllCapske trueefek garis bawah akan dihapus.

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


Catatan

Menggunakan textAllCaps dengan string (login_change_settings) yang berisi markup; markup akan diturunkan oleh konversi topi

Transformasi teks textAllCaps pada akhirnya akan memanggil toString pada CharSequence, yang memiliki efek bersih menghapus markup seperti. Pemeriksaan ini mencari penggunaan string yang berisi markup yang juga menentukan textAllCaps = true.

Tebo
sumber
2

Ada berbagai cara untuk mendapatkan teks yang digarisbawahi dalam TextView Android.

1. <u>This is my underlined text</u> atau

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

2. Anda dapat melakukan hal yang sama secara terprogram.

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

3. Ini bisa dilakukan dengan membuat SpannableString dan kemudian mengaturnya sebagai properti teks TextView

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

Saya menggunakan metode di bawah ini, itu berhasil untuk saya. Di bawah ini adalah contoh untuk Tombol tetapi kita juga bisa menggunakannya di TextView.

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

Jika Anda ingin membandingkan teks String atau teks akan berubah secara dinamis maka Anda dapat membuat tampilan di Constraint layout yang akan disesuaikan dengan panjang teks seperti ini

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

Cara Paling Mudah

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

Juga mendukung anak-anak TextView seperti EditText, Button, Checkbox

jika kamu mau

- Teks garis bawah yang bisa diklik?

- Menggarisbawahi beberapa bagian TextView?

Kemudian Periksa Jawaban Ini

Khemraj
sumber