Android XML'de bir metnin altını nasıl çizersiniz?


Yanıtlar:


174

Bir dize kaynağı xml dosyası kullanıyorsanız (HTML etiketlerini destekler) <b> </b>, <i> </i>ve kullanılarak yapılabilir <u> </u>.

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

Kod kullanımından bir şeyin altını çizmek istiyorsanız:

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

Bu yardımcı olur umarım


9
Bunu denedim. dize altı çizili olarak gelmiyor mu?
— Michael Zeuner

5
<u>Etiketlerin temelinin çalışmadığı durumlar ile karşılaştım , örneğin bazen özel bir yazı tipi kullanıyorsanız. Bununla birlikte, programatik olarak temelde yatan UnderlineSpangerçekten benim için asla başarısız olmadı, bu yüzden en güvenilir çözüm olarak bunu öneririm.
— Giulio Piancastelli

Java'da metin ayarlamanıza gerek yoktur. Sadece <u>ve <\u>XML olarak kullanın ve bu yeterli.
— Maksim Dmitriev

9
benim durumumda, android stüdyo önizlemesi html etiketini belirleyemedi. ama bir kez projeyi gerçek cihazda çalıştırdım, altı çizili metin mutlu bir şekilde gösterildi.
— Alvin

1
<whine> Google bize zaten kalın / italik / normal verdiğinde bir dizeyi HTML'ye dönüştürmeniz gerektiği gerçeği, Android'e 5 yıldan fazla bir süredir sahip olduğumuzu düşünürsek oldukça gevşek ... </whine>
— angryITguy

57

Bunu kullan:

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

Bu çözümün her zaman metnin tamamının altını çizdiğini unutmayın, bu nedenle yalnızca bir kısmının altını çizmek istenirse bu mümkün değildir. Bunun için ihtiyacınız var UnderlineSpan.
— Giulio Piancastelli

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

Eğer işe yaramazsa o zaman

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

Çünkü "<" bazen bir anahtar kelime olabilir.

Ve görüntülemek için

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

3
Bu işe yarar ... ama eğer herhangi bir nedenle TextView'ı android: textAllCaps = "true" xml niteliğini kullanacak şekilde ayarlarsanız, alt çizgi görünmeyecektir. Bu değiştiriciyi kaldırın ve alt çizgi amaçlandığı gibi görünecektir. Sadece bir uyarı :)
— Matt W

5

Öncelikle String.xml dosyasına gidin

italik veya kalın veya altı çizili gibi herhangi bir HTML özelliğini buraya ekleyebilirsiniz.

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

3

Bunu yapmanın başka bir yolu, TextView'ı genişleten özel bir bileşen oluşturmaktır. Birden çok altı çizili Metin Görünümüne sahip olmanız gereken durumlar için iyidir.

İşte bileşenin kodu:

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

Ve xml'de nasıl kullanılır:

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


2

Eğer ayarlarsanız aşağıda işaretlemeyi ancak not kullanabilirsiniz textAllCapsiçin truealt çizgi etkisi kaldırılır.

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


Not

TextAllCaps'i biçimlendirme içeren bir dizeyle (login_change_settings) kullanma; biçimlendirme, büyük harf dönüşümü tarafından düşürülecektir

TextAllCaps metin dönüşümü, CharSequence üzerinde toString'i çağırarak sona erecektir; bu,. Bu kontrol, textAllCaps = true değerini de belirten biçimlendirme içeren dizelerin kullanımlarını arar.


2

Bir Android TextView'da altı çizili metin elde etmenin farklı yolları vardır.

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

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

2. Aynısını programlı olarak yapabilirsiniz.

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

3. SpannableString oluşturarak ve ardından bunu TextView metin özelliği olarak ayarlayarak yapılabilir.

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

2

Aşağıdaki yöntemi kullandım, benim için çalıştı. Aşağıda Button için bir örnek var ama TextView'da da kullanabiliriz.

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

1

Metin dizesini karşılaştırmak istiyorsanız veya metin dinamik olarak değişecekse, kısıtlama düzeninde bir görünüm oluşturabilirsiniz, bu şekilde metin uzunluğuna göre ayarlanacaktır.

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

En Kolay Yol

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

Ayrıca EditText, Button, Checkbox gibi TextView çocuklarını da destekleyin

Eğer istersen

- Tıklanabilir altı çizili metin?

- TextView’un birden çok bölümünün altını çizmek?

Sonra Bu Yanıtı Kontrol Edin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.