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?


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?


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


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


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>

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

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"

Bagaimana saya bisa mengubah keluarga font menggunakan setTypeface juga berlaku tebal, miring, bergaris bawah?
Pangeran


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

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>

5
    style="?android:attr/listSeparatorTextViewStyle
  • dengan membuat gaya ini, kamu dapat mencapai garis bawah


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

Ini harus menjadi jawaban yang diterima 100%
sachadso
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.