Làm cách nào để đặt kiểu phông chữ thành đậm, in nghiêng và gạch chân trong TextView của Android?


450

Tôi muốn làm một TextView nội dung của một chữ in đậm, in nghiêng và gạch chân. Tôi đã thử đoạn mã sau và nó hoạt động, nhưng không gạch chân.

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

Tôi phải làm nó như thế nào? Bất kỳ ý tưởng nhanh chóng?


nó chỉ hoạt động để thiết lập chỉ một trong số họ?
falstro

vâng làm việc tốt tôi cũng muốn làm cho nó dưới dòng.
d-man

6
textView.setPaintFlags (Paint.UNDERLINE_TEXT_FLAG);
bCliks

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

3
4 cách để tạo Android TextView Bold Tôi nghĩ bạn nên đọc bài viết này.
c49

Câu trả lời:


279

Tôi không biết về gạch chân, nhưng để in đậm và in nghiêng thì có "bolditalic". Không có đề cập đến gạch chân ở đây: http://developer.android.com/reference/android/widget/TextView.html#attr_android:textStyle

Lưu ý bạn rằng để sử dụng các đề cập bolditalicbạn cần, và tôi trích dẫn từ trang đó

Phải là một hoặc nhiều (cách nhau bởi '|') của các giá trị không đổi sau.

vì vậy bạn sẽ sử dụng bold|italic

Bạn có thể kiểm tra câu hỏi này để gạch chân: Tôi có thể gạch chân văn bản trong bố cục Android không?


48
cho dưới dòng .. textView.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
bCliks

1
@bala lưu ý rằng giải pháp của bạn luôn gạch chân toàn bộ văn bản, vì vậy nó không khả thi trong trường hợp khi người ta muốn gạch chân chỉ một phần của nó.
Giulio Piancastelli

361

Điều này sẽ làm cho TextView của bạn đậm , gạch chânin nghiêng cùng một lúc.

chuỗi DOM

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

Để đặt Chuỗi này thành TextView của bạn, hãy thực hiện điều này trong tệp main.xml của bạ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" />

hoặc trong JAVA ,

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

Đôi khi, cách tiếp cận trên sẽ không hữu ích khi bạn có thể phải sử dụng Văn bản động. Vì vậy, trong trường hợp đó SpannableString có hiệu lực.

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

ĐẦU RA

nhập mô tả hình ảnh ở đây


3
Tôi đã kiểm tra nó trong 2.1. Vì vậy, ít nhất nó nên hoạt động từ 2.1 trở lên
Andro Selva

Có thể cân nhắc sử dụngnew StyleSpan(Typeface.BOLD_ITALIC)
Cheok Yan Cheng

Tại sao nó không hoạt động trên chuỗi nối động? Nó có dây mà một số số xuất hiện ....
AuBee

152

Hoặc chỉ như thế này trong 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

Hoặc trong Java:

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

Giữ cho nó đơn giản và trong một dòng :)


1
Bằng cách chèn gói kotlinx.android.sy merg cho chế độ xem mà bạn đang làm việc, findViewByID không cần thiết trong Kotlin, tạo từng dòng setTypeface: textViewOne.setTypeface (...)
cren90

paintFlagscần thiết không Nó hoạt động mà không có điều đó
Mitchs

75

Để in đậm và in nghiêng bất cứ điều gì bạn đang làm là chính xác cho dấu gạch dưới, hãy sử dụng mã sau

Xin chàoAndroid.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);
}
}

tệp chính

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

chuỗi tệp

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

Để xóa underlinegiá trị vượt qua Null thay vì new UnderlineSpan()như sau content.setSpan(null, 0, content.length(), 0);
Sami Eltamawy 17/05/2015

47

Đây là một cách dễ dàng để thêm phần gạch chân, trong khi duy trì các cài đặt khác:

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

Xin lưu ý rằng giải pháp này luôn gạch chân toàn bộ văn bản, vì vậy nó không khả thi trong trường hợp khi người ta muốn gạch chân chỉ một phần của nó.
Giulio Piancastelli

42

Chương trình:

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

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 như:

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

Làm thế nào tôi có thể thay đổi họ phông chữ bằng setTypeface cũng áp dụng in đậm, in nghiêng, gạch chân?
Hoàng tử


23

Nếu bạn đang đọc văn bản đó từ một tập tin hoặc từ mạng.

Bạn có thể đạt được nó bằng cách thêm các thẻ HTML vào văn bản của bạn như đã đề cập

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

và sau đó bạn có thể sử dụng HTML lớp rằng các quá trình HTML chuỗi thành văn bản theo kiểu thể hiển thị.

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

Phương thức fromHtml (Chuỗi) không được dùng trong cấp độ API 24 Thảo luận thêm tại đây: stackoverflow.com/questions/37904739/
mẹo

20

Không có trích dẫn làm việc cho tôi:

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



3

Bạn có thể đạt được nó một cách dễ dàng bằng cách sử dụng Kotlin buildSpannedString{}dưới sự core-ktxphụ thuộc của nó .

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

textView.text = formattedString

Đây phải là câu trả lời được chấp nhận 100%
sachadso
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.