Bagaimana cara mengatur gaya font menjadi tebal, miring dan bergaris bawah di Android TextView?

450

Saya ingin membuat TextViewkonten tebal, miring dan bergaris bawah. Saya mencoba kode berikut dan berhasil, tetapi tidak menggarisbawahi.

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

Bagaimana saya melakukannya? Ada ide cepat?

b-man
sumber
apakah itu berfungsi untuk menetapkan hanya satu dari mereka?
falstro
ya berfungsi dengan baik saya juga ingin membuatnya di bawah garis.
d-man
6
textView.setPaintFlags (Paint.UNDERLINE_TEXT_FLAG);
bCliks
15
tv.setTypeface(null, Typeface.BOLD_ITALIC);
3
4 cara untuk membuat Android TextView Bold Saya pikir Anda harus membaca artikel ini.
c49

Jawaban:

279

Saya tidak tahu tentang garis bawah, tetapi untuk huruf tebal dan miring ada "bolditalic". Tidak ada garis bawah di sini: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle

Pikiran Anda bahwa untuk menggunakan yang disebutkan bolditalicAnda perlu, dan saya kutip dari halaman itu

Harus satu atau lebih (dipisahkan oleh '|') dari nilai konstan berikut.

jadi kamu akan gunakan bold|italic

Anda dapat memeriksa pertanyaan ini untuk menggarisbawahi: Dapatkah saya menggarisbawahi teks dalam tata letak android?

Nanne
sumber
48
untuk garis bawah .. textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
bCliks
1
@bala ketahuilah bahwa solusi Anda selalu menggarisbawahi seluruh teks, jadi itu tidak layak jika seseorang ingin menggarisbawahi sebagian saja.
Giulio Piancastelli
362

Ini akan membuat TextView Anda tebal , bergaris bawah dan miring secara bersamaan.

strings.xml

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

Untuk mengatur String ini ke TextView Anda, lakukan ini di main.xml Anda

<?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" />

atau Di JAWA ,

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

Terkadang pendekatan di atas tidak akan membantu ketika Anda mungkin harus menggunakan Teks Dinamis. Jadi dalam hal ini SpannableString mulai beraksi.

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

KELUARAN

masukkan deskripsi gambar di sini

Andro Selva
sumber
3
Saya memeriksanya di 2.1. Jadi setidaknya itu harus bekerja dari 2.1 dan di atas
Andro Selva
Dapat mempertimbangkan untuk menggunakannew StyleSpan(Typeface.BOLD_ITALIC)
Cheok Yan Cheng
Mengapa itu tidak berfungsi pada string gabungan dinamis? Ada kabel bahwa beberapa nomor muncul ....
AuBee
152

Atau seperti ini di Kotlin:

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

Atau di Jawa:

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

Tetap sederhana dan dalam satu baris :)


sumber
1
Dengan memasukkan paket kotlinx.android.synthetic untuk tampilan yang sedang Anda kerjakan, findViewByID tidak diperlukan di Kotlin, membuat setiap baris setTypeface: textViewOne.setTypeface (...)
cren90
Apakah paintFlagsperlu? Ini bekerja tanpa itu
Prab
75

Untuk huruf tebal dan miring apa pun yang Anda lakukan benar untuk menggarisbawahi gunakan kode berikut

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>
Vivek
sumber
Untuk menghapus nilai underlinelulus Null alih-alih new UnderlineSpan()sebagai berikut content.setSpan(null, 0, content.length(), 0);
Sami Eltamawy
47

Ini adalah cara mudah untuk menambahkan garis bawah, sambil mempertahankan pengaturan lain:

textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
sonida
sumber
Ketahuilah bahwa solusi ini selalu menggarisbawahi seluruh teks, sehingga tidak layak jika seseorang ingin menggarisbawahi sebagian saja.
Giulio Piancastelli
42

Programmatialy:

Anda dapat melakukannya secara terprogram menggunakan metode setTypeface ():

Di bawah ini adalah kode untuk Typeface default

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

dan jika Anda ingin mengatur Typeface khusus:

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:

Anda dapat mengatur secara langsung dalam file XML seperti:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Raja Misa
sumber
Bagaimana saya bisa mengubah keluarga font menggunakan setTypeface juga berlaku tebal, miring, bergaris bawah?
Pangeran
@Prince lihat di sini stackoverflow.com/questions/12128331/…
King of Masses
23

Jika Anda membaca teks itu dari file atau dari jaringan.

Anda dapat mencapainya dengan menambahkan tag HTML ke teks Anda seperti yang disebutkan

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

dan kemudian Anda bisa menggunakan kelas HTML yang memproses string HTML menjadi teks gaya yang dapat ditampilkan.

// textString is the String after you retrieve it from the file
textView.setText(Html.fromHtml(textString));
Ahmed Hegazy
sumber
Metode fromHtml (String) sudah tidak digunakan lagi di API level 24. Diskusi lebih lanjut di sini: stackoverflow.com/questions/37904739/...
Pavel Biryukov
20

Tanpa tanda kutip bekerja untuk saya:

<item name="android:textStyle">bold|italic</item>
Lotfi
sumber
5
    style="?android:attr/listSeparatorTextViewStyle
  • dengan membuat gaya ini, kamu dapat mencapai garis bawah
pengembang mimpi
sumber
4

Hanya satu baris kode dalam xml

        android:textStyle="italic"
Boris Ruzanov
sumber
3

Anda dapat mencapainya dengan mudah dengan menggunakan Kotlin di buildSpannedString{}bawah core-ktxketergantungannya.

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

textView.text = formattedString
Morgan Koh
sumber
Ini harus menjadi jawaban yang diterima 100%
sachadso