Android TextView'de yazı tipi stilini kalın, italik ve altı çizili olarak nasıl ayarlayabilirim?


450

Bir TextViewiçeriğini kalın, italik ve altı çizili yapmak istiyorum . Aşağıdaki kodu denedim ve işe yarıyor, ama altını çizmiyor.

<Textview android:textStyle="bold|italic" ..

Nasıl yaparım? Hızlı bir fikrin var mı?


bunlardan sadece birini ayarlamak işe yarıyor mu?
falstro

evet iyi çalışıyor ben de çizgi altında yapmak istiyorum.
d-man

6
textView.setPaintFlags (Paint.UNDERLINE_TEXT_FLAG);
bCliks

15
tv.setTypeface(null, Typeface.BOLD_ITALIC);

3
Android TextView Bold yapmanın 4 yolu Bu makaleyi okumanız gerektiğini düşünüyorum.
c49

Yanıtlar:


279

Altını çizmiyorum, ama kalın ve italik için var "bolditalic". Burada alt çizgiden bahsedilmiyor: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle

Belirtilenleri kullanmak için bolditalicihtiyacınız olduğunu unutmayın ve ben bu sayfadan alıntı yapıyorum

Aşağıdaki sabit değerlerden bir veya daha fazlası ('|' ile ayrılmış) olmalıdır.

yani kullanırdın bold|italic

Bu soruyu alt çizgi için kontrol edebilirsiniz : Android düzeninde metnin altını çizebilir miyim?


48
for under line .. textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
bCliks

1
@bala, çözümünüzün her zaman metnin altını çizdiğinin farkında olun, bu yüzden birinin sadece bir kısmının altını çizmek istendiği durumlarda mümkün değildir.
Giulio Piancastelli

362

Bu, TextView'inizi aynı anda kalın , altı çizili ve italik yapmalıdır .

strings.xml

<resources>
    <string name="register"><u><b><i>Copyright</i></b></u></string>
</resources>

Bu Dizeyi TextView öğenize ayarlamak için bunu main.xml dosyasında yapın

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="@string/register" />

veya JAVA'da ,

TextView textView = new TextView(this);
textView.setText(R.string.register);

Dinamik Metin kullanmanız gerektiğinde bazen yukarıdaki yaklaşım yardımcı olmaz. Bu durumda SpannableString devreye girer.

String tempString="Copyright";
TextView text=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(tempString);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.BOLD), 0, spanString.length(), 0);
spanString.setSpan(new StyleSpan(Typeface.ITALIC), 0, spanString.length(), 0);
text.setText(spanString);

ÇIKTI

resim açıklamasını buraya girin


3
2.1'de kontrol ettim. Bu yüzden en azından 2.1 ve üstü bir şekilde çalışmalı
Andro Selva

Kullanmayı düşünebilirsiniznew StyleSpan(Typeface.BOLD_ITALIC)
Cheok Yan Cheng

Neden dinamik birleştirilmiş dize üzerinde çalışmıyor? Bazı numaraların ortaya
çıkması

153

Veya Kotlin'deki gibi:

val tv = findViewById(R.id.textViewOne) as TextView
tv.setTypeface(null, Typeface.BOLD_ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD or Typeface.ITALIC)
// OR
tv.setTypeface(null, Typeface.BOLD)
// OR
tv.setTypeface(null, Typeface.ITALIC)
// AND
tv.paintFlags = tv.paintFlags or Paint.UNDERLINE_TEXT_FLAG

Veya Java'da:

TextView tv = (TextView)findViewById(R.id.textViewOne);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD|Typeface.ITALIC);
// OR
tv.setTypeface(null, Typeface.BOLD);
// OR
tv.setTypeface(null, Typeface.ITALIC);
// AND
tv.setPaintFlags(tv.getPaintFlags()|Paint.UNDERLINE_TEXT_FLAG);

Basit ve tek satırda tutun :)


1
Çalıştığınız görünüm için kotlinx.android.synthetic paketini ekleyerek, setlinTypeface satırlarının her birini yapmak için Kotlin'de findViewByID gerekli değildir: textViewOne.setTypeface (...)
cren90 11:17 '

olan paintFlagsgerekli? Bu olmadan çalışıyor
Prabs

75

Kalın ve italik için yaptığınız her şey, aşağıdaki kodu alt çizgi kullanımı için doğrudur

HelloAndroid.java

 package com.example.helloandroid;

 import android.app.Activity;
 import android.os.Bundle;
 import android.text.SpannableString;
 import android.text.style.UnderlineSpan;
import android.widget.TextView;

public class HelloAndroid extends Activity {
TextView textview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    textview = (TextView)findViewById(R.id.textview);
    SpannableString content = new SpannableString(getText(R.string.hello));
    content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
    textview.setText(content);
}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"
android:textStyle="bold|italic"/>

string.xml

<?xml version="1.0" encoding="utf-8"?>
 <resources>
  <string name="hello">Hello World, HelloAndroid!</string>
  <string name="app_name">Hello, Android</string>
</resources>

Aşağıdaki gibi underlinegeçiş Null değerini kaldırmak içinnew UnderlineSpan()content.setSpan(null, 0, content.length(), 0);
Sami Eltamawy 17:15

47

Bu, diğer ayarları korurken alt çizgi eklemenin kolay bir yoludur:

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

Bu çözümün her zaman metnin tamamının altını çizdiğini unutmayın, bu yüzden kişinin sadece bir kısmının altını çizmek istendiği durumlarda mümkün değildir.
Giulio Piancastelli

42

Programmatialy:

SetTypeface () yöntemini kullanarak programlı olarak yapabilirsiniz:

Varsayılan Yazı Tipi için kod aşağıdadır

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

ve özel Yazı Tipi ayarlamak istiyorsanız:

textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      // for Normal Text
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);        // for Bold only
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      // for Italic
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); // for Bold and Italic

XML:

Doğrudan XML dosyasında aşağıdaki gibi ayarlayabilirsiniz:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

SetTypeface kullanarak yazı tipi ailesini nasıl değiştirebilirim? Kalın, italik, alt çizgi uygular?
Prens


24

Bu metni bir dosyadan veya ağdan okuyorsanız.

Metninize yukarıda belirtildiği gibi HTML etiketleri ekleyerek bunu başarabilirsiniz

This text is <i>italic</i> and <b>bold</b>
and <u>underlined</u> <b><i><u>bolditalicunderlined</u></b></i>

ve daha sonra da kullanabilirsiniz HTML süreçleri görüntülenebilir tarz metin dizeleri HTML O sınıfı.

// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));

fromHtml (String) yöntemi API düzey 24'te kullanımdan kaldırıldı Daha fazla tartışma burada: stackoverflow.com/questions/37904739/…
Pavel Biryukov

20

Tırnaklar olmadan benim için çalışıyor:

<item name="android:textStyle">bold|italic</item>

5
    style="?android:attr/listSeparatorTextViewStyle
  • bu stili yaparak, altını çizebilirsin


3

Bağımlılığı buildSpannedString{}altında Kotlin'leri kullanarak kolayca başarabilirsiniz core-ktx.

val formattedString = buildSpannedString {
    append("Regular")
    bold { append("Bold") }
    italic { append("Italic") }
    underline { append("Underline") }
    bold { italic {append("Bold Italic")} }
}

textView.text = formattedString

Bu kabul edilen cevap% 100 olmalıdır
sachadso
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.