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.