Cách đặt TextView textStyle như in đậm, in nghiêng


843

Làm cách nào để đặt TextViewkiểu (in đậm hoặc in nghiêng) trong Java và không sử dụng bố cục XML?

Nói cách khác, tôi cần viết android:textStylebằng Java.

Câu trả lời:


1885
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Để giữ kiểu chữ trước đó

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

5
Để xóa kiểu có thể được sử dụng Kiểu chữ.NORMAL
Brais Gabin

351
Nếu bạn làm điều đó, bạn sẽ mất bất kỳ kiểu chữ nào trước đó. Để giữ cái trước đó, hãy làm một cái gì đó như textView.setTypeface (textView.getTypeface (), typeface.BOLD_ITALIC);
leocadiotine

34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);sẽ không loại bỏ kiểu in đậm hoặc in nghiêng từ a TextView. Bạn sẽ cần phải sử dụng textView.setTypeface(null, Typeface.NORMAL);cho điều đó.
Jarett Millard

57
Để giữ bất kỳ kiểu chữ nào trước đây nhưng để loại bỏ kiểu in đậm hoặc in nghiêng, hãy sử dụng mã sau:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc

6
Cảm ơn @Shnkc, Bạn đã chỉ cho tôi đi đúng hướng. Trên thực tế bạn chỉ cần: textView.setTypeface (typeface.create (textView.getTypeface (), typeface.NORMAL));
PedroHidalgo

271

Hãy thử điều này để thiết lập TextViewcho đậm hoặc in nghiêng

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

14
Ngẫu nhiên, nếu bạn muốn xóa một kiểu chữ hiện có, bạn sẽ cần phải làm một cái gì đó khác, ví dụ:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb

@ greg7gkb tv.setTypeface(null, Typeface.BOLD);điều này sẽ không làm điều tương tự (xóa một kiểu chữ hiện có)?
Mitchs

Chuyển null vào setTypeface () có nghĩa là TextView sử dụng mặc định được mã hóa cứng có thể khác với Kiểu chữ được đặt trước đó.
greg7gkb

142

Lập trình:

Bạn có thể lập trình bằng cách sử dụng setTypeface():

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

XML:

Bạn có thể đặt Trực tiếp trong tệp XML <TextView />như:

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

11
Người hỏi đã hỏi làm thế nào để làm điều đó mà không sử dụng bố cục XML.
JulianSymes

6
Kiểm tra câu hỏi with in Java and without using XMLbằng cách này cũng sẽ giúp người khác.
Pratik Butani

5
Đúng. Tôi đến đây thông qua Google và nó chỉ giúp tôi. Cảm ơn :)
Atul

96

Bạn có hai lựa chọn:

Tùy chọn 1 (chỉ hoạt động cho đậm, in nghiêng và gạch chân):

String s = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(Html.fromHtml(s));

Lựa chọn 2:

Sử dụng một Spannable ; nó phức tạp hơn, nhưng bạn có thể tự động sửa đổi các thuộc tính văn bản (không chỉ in đậm / in nghiêng, cả màu sắc).


6
Với typeFacebạn có thể đặt một kiểu duy nhất cho toàn bộ văn bản.
Gabriel Negut

2
Khi tôi đang cố gắng trong hàng tùy chỉnh của mình, nó không hiểu tại sao? Chuỗi s1 = "<b> Bạn đang ở: </ b>"; người giữ.address = (TextView) convertView.findViewById (R.id.address bản_view); người giữ.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda

2
Phương pháp này là phong cách văn bản một phần tuyệt vời. Giống như một trích dẫn bên trong một văn bản lớn.
Salih Erikci

1
Phương thức đầu tiên không hoạt động trong trường hợp của tôi private void createdTextView (Tiêu đề chuỗi, văn bản chuỗi) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + title + "</ b>") + ":" + văn bản); }
garenyondem

1
Các tùy chọn có thể mở rộng và từHTML có thể làm chậm việc nhập / setText nếu văn bản lớn do tính toán lại bố cục. Tránh nó nếu bạn có sẵn các phương pháp khác.
Eugene Kartoyev

43

Lập trình:

Bạn có thể thực hiện theo chương trình bằng setTypeface()phương pháp:

Dưới đây là mã cho kiểu chữ mặc định

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

và nếu bạn muốn đặt Kiểu chữ tùy chỉnh :

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:

Bạn có thể đặt trực tiếp trong tệp XML <TextView />như thế này:

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

Hoặc bạn có thể đặt phông chữ fav của mình (từ tài sản). để biết thêm thông tin xem liên kết


14
TextView text = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);

bây giờ thiết lập các textviewthuộc tính ..

text.setTypeface(null, Typeface.BOLD);  //-- for only bold the text
text.setTypeface(null, Typeface.BOLD_ITALIC);  //-- for  bold & italic the text
text.setTypeface(null, Typeface.ITALIC);  // -- for  italic the text

11

Đơn giản nếu bạn muốn làm cho văn bản đậm . viết dòng này trong bố trí của bạn trong thuộc tính xem văn bản

android:textStyle="bold"

10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);

10

Nó sẽ là

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

và in nghiêng sẽ có thể được thay thế Typeface.DEFAULT_BOLDbằng Typeface.DEFAULT_ITALC.

Hãy cho tôi biết làm thế nào nó hoạt động.


10

Hãy thử điều này để thiết lập TextView phong cách của bạn bằng mã java

txt1.setTypeface(null,Typeface.BOLD_ITALIC);


7

Thử cái này:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

6

Thử cái này:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);

4

Cách tiêu chuẩn để làm điều này là sử dụng các kiểu tùy chỉnh. Ví dụ-

Trong styles.xmlthêm những điều sau đây.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyApp.TextAppearance.LoginText">
    <item name="android:textStyle">bold|italic</item>
</style>

Áp dụng phong cách này cho bạn TextViewnhư sau.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyApp.TextAppearance.LoginText" />

4

Một cách bạn có thể làm là:

myTextView.setTypeface(null, Typeface.ITALIC);
myTextView.setTypeface(null, Typeface.BOLD_ITALIC);
myTextView.setTypeface(null, Typeface.BOLD);
myTextView.setTypeface(null, Typeface.NORMAL);

Một tùy chọn khác nếu bạn muốn giữ kiểu chữ trước đó và không muốn mất áp dụng trước đó:

myTextView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      
myTextView.setTypeface(textView.getTypeface(), Typeface.BOLD);        
myTextView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      
myTextView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); 

4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Để giữ kiểu chữ trước đó

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

3

Bạn có thể thử như thế này:

<string name="title"><u><b><i>Your Text</i></b></u></string>

3

Cách dễ nhất bạn có thể làm dựa trên tiêu chí lựa chọn kiểu là:

String pre = "", post = "";

if(isBold){
    pre += "<b>"; post += "</b>";
}
if(isItalic){
    pre += "<i>"; post += "</i>";
}
if(isUnderline){
    pre += "<u>"; post += "</u>";
}

textView.setText(Html.fromHtml(pre + editText.getText().toString()+ post));
// you can also use it with EidtText
editText.setText(Html.fromHtml(pre + editText.getText().toString()+ post));

2

Vì tôi muốn sử dụng một phông chữ tùy chỉnh chỉ kết hợp một số câu trả lời hoạt động với tôi. Rõ ràng các thiết lập trong lượt layout.xmlthích của tôi android:textStlyle="italic"đã bị AOS bỏ qua. Vì vậy, cuối cùng tôi đã phải làm như sau: trong strings.xmlchuỗi mục tiêu được khai báo là:

<string name="txt_sign"><i>The information blah blah ...</i></string>

sau đó thêm vào mã:

TextView textSign = (TextView) findViewById(R.id.txt_sign);
FontHelper.setSomeCustomFont(textSign);
textSign.setTypeface(textSign.getTypeface(), Typeface.ITALIC);

Tôi đã không thử Spannabletùy chọn (mà tôi cho rằng PHẢI làm việc) nhưng

textSign.setText(Html.fromHtml(getString(R.string.txt_sign))) 

không có tác dụng. Ngoài ra nếu tôi loại bỏ các italic tagtừ strings.xmlbỏ setTypeface()tất cả một mình nó không có tác dụng một trong hai. Android rắc rối ...


2

Và như đã giải thích ở đây Tài nguyên chuỗi dành cho nhà phát triển Android nếu bạn cần sử dụng các tham số trong tài nguyên văn bản theo kiểu của mình, bạn phải thoát khỏi dấu ngoặc mở

<resources>
<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

và gọi formatHtml (chuỗi)

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);

2

Trong trường hợp của tôi:

1 - đặt văn bản

2 - đặt kiểu chữ

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);

1

Đây là điều duy nhất phù hợp với tôi trên OnePlus 5T được định cấu hình với phông chữ OnePlus Slate ™:

textView.setTypeface(Typeface.create(textView.getTypeface(), useBold ? Typeface.BOLD : Typeface.NORMAL));

Các phương pháp khác sẽ khiến nó rơi trở lại Roboto khi BÓNG hoặc BÌNH THƯỜNG.


1

Trong khi sử dụng các thẻ được đơn giản hóa với AndroidX, hãy cân nhắc sử dụng HtmlCompat.fromHtml ()

String s = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"    
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(HtmlCompat.fromHtml(s, FROM_HTML_MODE_LEGACY));

0

Cách tốt nhất là định nghĩa nó trong styles.xml

<style name="common_txt_style_heading" parent="android:style/Widget.TextView">
        <item name="android:textSize">@dimen/common_txtsize_heading</item>
        <item name="android:textColor">@color/color_black</item>
        <item name="android:textStyle">bold|italic</item>
</style>

Và cập nhật nó trong TextView

  <TextView
     android:id="@+id/txt_userprofile"
     style="@style/common_txt_style_heading"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_marginTop="@dimen/margin_small"
     android:text="@string/some_heading" />

0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Sử dụng phương pháp trên để đặt kiểu chữ theo chương trình.


0

1) Bạn có thể thiết lập nó với TypeFace. 2) Bạn có thể sử dụng trực tiếp trong chuỗi DOM (trong thư mục giá trị của bạn) 3) Bạn có thể Chuỗi myNewString = "Đây là văn bản in đậm của tôi Đây là chuỗi in nghiêng của tôi Đây là chuỗi gạch chân của tôi


0

Bạn có thể đặt kiểu chữ khác nhau bằng ví dụ được đưa ra dưới đây -

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

Hoặc nếu bạn muốn đặt một phông chữ khác và kiểu chữ của nó. Thêm nó vào tài sản hoặc thư mục thô và sau đó sử dụng nó như

  Typeface face= Typeface.createFromAsset(getAssets(), "font/font.ttf");
  tv1.setTypeface(face);

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.