📜  android高亮部分textview - Java(1)

📅  最后修改于: 2023-12-03 14:39:12.149000             🧑  作者: Mango

Android高亮部分TextView

在Android应用的UI设计中,将某些关键字或者内容进行高亮是很常见的需求。本文介绍一种实现在TextView中高亮部分文字的方法。

实现方法
  1. 继承自TextView并重写onDraw方法
public class HighlightTextView extends TextView {

    private int highlightColor; // 高亮颜色
    private String highlightText; // 需要高亮的文本

    public HighlightTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public void setHighlightColor(int highlightColor) {
        this.highlightColor = highlightColor;
    }

    public void setHighlightText(String highlightText) {
        this.highlightText = highlightText;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (highlightText == null) {
            super.onDraw(canvas);
            return;
        }

        String text = getText().toString();
        int index = text.indexOf(highlightText);

        if (index >= 0) {  // 找到需要高亮的文本
            Paint paint = getPaint();
            paint.setColor(highlightColor);
            int x = (int) paint.measureText(text.substring(0, index)); // 高亮文本前的长度
            canvas.drawText(highlightText, x, getBaseline(), paint);
        } else { // 没有找到需要高亮的文本
            super.onDraw(canvas);
        }
    }
}
  1. 在布局文件中使用自定义的TextView
<com.example.HighlightTextView
    android:id="@+id/highlight_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="文本内容需要高亮的部分"
    app:highlightColor="@color/red"  // 设置高亮颜色
    app:highlightText="需要高亮的" />  // 设置需要高亮的文本
示例

下面是一个示例,展示如何在TextView中高亮部分文本。

Activity
public class MainActivity extends AppCompatActivity {

    private HighlightTextView highlightTextView;

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

        highlightTextView = findViewById(R.id.highlight_textview);
        highlightTextView.setHighlightColor(getResources().getColor(R.color.red));
        highlightTextView.setHighlightText("需要高亮的");
    }
}
布局文件
<com.example.HighlightTextView
    android:id="@+id/highlight_textview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="文本内容需要高亮的部分"
    app:highlightColor="@color/red" 
    app:highlightText="需要高亮的" />
结论

这种方法简单易用,可以很方便地实现在TextView中高亮部分文本的效果。