📅  最后修改于: 2023-12-03 14:39:12.149000             🧑  作者: Mango
在Android应用的UI设计中,将某些关键字或者内容进行高亮是很常见的需求。本文介绍一种实现在TextView中高亮部分文字的方法。
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);
}
}
}
<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中高亮部分文本。
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中高亮部分文本的效果。