Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách làm đậm một phần văn bản trong TextView Android

Giới thiệu

Bài viết này minh họa cách làm đậm (bold) chỉ một phần cụ thể của văn bản trong TextView sử dụng SpannableString và StyleSpan. Cách này linh hoạt hơn so với đặt cả TextView thành bold.

Các bước thực hiện

Bước 1: Tạo dự án mới

Mở Android Studio, chọn File → New Project và tạo dự án.

Bước 2: Thiết kế giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="25dp"
        android:textSize="40sp" />

</RelativeLayout>

Bước 3: Viết code logic (src/MainActivity.java)

import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.StyleSpan;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);
        String text = "Món ăn yêu thích của tôi là Phở";

        SpannableString spannableString = new SpannableString(text);
        StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);

        // Làm đậm từ "Phở" (vị trí 24-27 trong chuỗi tiếng Việt)
        // Lưu ý: Cần tính chính xác index dựa trên chuỗi thực tế
        spannableString.setSpan(boldSpan, 24, 27, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        textView.setText(spannableString);
    }
}

Bước 4: Cấu hình AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Chạy ứng dụng

Kết nối thiết bị, nhấn Run. TextView hiển thị "Món ăn yêu thích của tôi là Phở" với từ "Phở" được in đậm.

Các Span hữu ích khác

SpanChức năng
StyleSpanBold, Italic, Bold Italic
ForegroundColorSpanĐổi màu chữ
BackgroundColorSpanĐổi màu nền chữ
UnderlineSpanGạch chân
StrikethroughSpanGạch ngang
RelativeSizeSpanThay đổi cỡ chữ tương đối
ClickableSpanTạo link có thể nhấn
ImageSpanChèn hình ảnh vào văn bản

Kết hợp nhiều Span

SpannableString ss = new SpannableString("Ví dụ");
ss.setSpan(new StyleSpan(Typeface.BOLD), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ForegroundColorSpan(Color.RED), 3, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new UnderlineSpan(), 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);

Lưu ý

  • Index trong setSpan là vị trí ký tự (0-based), không phải từ
  • Dùng Spanned.SPAN_EXCLUSIVE_EXCLUSIVE để span không mở rộng khi chèn text
  • Có thể dùng Html.fromHtml() cho HTML đơn giản: textView.setText(Html.fromHtml("Bình thường đậm bình thường"))