Android部分TextView加下划线

在Android应用程序开发中,TextView是常用的UI组件之一,用于显示文本内容。有时候,我们希望在TextView中的一部分文字下划线,以突出显示或标记特定的内容。本文将介绍如何在Android中通过代码实现TextView的下划线效果,并提供相应的示例代码。

1. 设置TextView的下划线

要在TextView中设置下划线,可以通过以下代码实现:

TextView textView = findViewById(R.id.text_view);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

上述代码中,首先通过findViewById方法获取到了一个TextView实例,然后使用setPaintFlags方法设置了TextView的绘制标志位,使用按位或操作符(|)将原有的绘制标志位与Paint.UNDERLINE_TEXT_FLAG进行按位或操作,从而添加了下划线效果。

2. 移除TextView的下划线

如果需要移除TextView的下划线,可以通过以下代码实现:

TextView textView = findViewById(R.id.text_view);
textView.setPaintFlags(textView.getPaintFlags() & ~Paint.UNDERLINE_TEXT_FLAG);

上述代码中,通过按位与操作符(&)将原有的绘制标志位与取反的Paint.UNDERLINE_TEXT_FLAG进行按位与操作,从而移除了下划线效果。

3. 在XML布局文件中使用TextView的下划线

除了通过代码设置TextView的下划线,我们还可以在XML布局文件中直接使用下划线样式。首先,在res/values目录下的styles.xml文件中定义一个样式:

<style name="UnderlinedTextView" parent="android:Widget.TextView">
    <item name="android:background">@null</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:textSize">16sp</item>
    <item name="android:drawablePadding">8dp</item>
    <item name="android:padding">8dp</item>
    <item name="android:layout_margin">8dp</item>
    <item name="android:textDecorationLine">underline</item>
</style>

上述代码中,定义了一个名为UnderlinedTextView的样式,其中使用了android:textDecorationLine属性来设置下划线效果。

接下来,在XML布局文件中使用这个样式来定义TextView:

<com.example.UnderlinedTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Underlined Text"
    style="@style/UnderlinedTextView"/>

上述代码中,通过在TextView中设置style属性为我们定义的样式UnderlinedTextView,从而实现了TextView的下划线效果。

4. 示例应用

下面给出一个完整的示例应用的代码,用于演示如何在Android中实现TextView的下划线效果。

XML布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="
    xmlns:app="
    xmlns:tools="
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Underlined Text"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        android:layout_margin="8dp"
        android:textStyle="normal"
        android:background="@null"
        android:textDecorationLine="underline"/>

    <Button
        android:id="@+id/button_remove"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Remove Underline"
        android:layout_marginTop="16dp"/>

</LinearLayout>

MainActivity.java

import android.graphics.Paint;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private TextView textView;
    private Button removeButton;

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

        textView = findViewById(R.id.text_view);
        removeButton = findViewById(R.id.button_remove);

        removeButton.setOnClickListener(new View.OnClickListener()