【发布时间】:2014-01-13 10:53:22
【问题描述】:
我的目标是创建在 Gmail 和 Foursquare 中使用的类似徽章的视图,如下所示。
到目前为止,我已经创建了ReplacementSpan 来处理单个视图的前景和背景颜色。
public class SearchTagSpan extends ReplacementSpan {
private int backgroundColor;
private int forgroundColor;
public SearchTagSpan() {
backgroundColor = -1;
forgroundColor = Color.BLACK;
}
public SearchTagSpan(int backgroundColor, int forgroundColor) {
this.backgroundColor = backgroundColor;
this.forgroundColor = forgroundColor;
}
@Override
public void draw(
Canvas canvas,
CharSequence text, int start, int end,
float x, int top, int y, int bottom,
Paint paint) {
RectF rect = new RectF(x, top, x + measureText(paint, text, start, end), bottom);
paint.setColor(backgroundColor);
canvas.drawRect(rect, paint);
paint.setColor(forgroundColor);
canvas.drawText(text, start, end, x, y, paint);
}
@Override
public int getSize(
Paint paint,
CharSequence text, int start, int end,
Paint.FontMetricsInt fm) {
return Math.round(paint.measureText(text, start, end));
}
private float measureText(Paint paint, CharSequence text, int start, int end) {
return paint.measureText(text, start, end);
}
}
正确应用背景和前景色,但是当视图变为多行时,每个徽章的背景会拉伸以填充TextView 布局中指定的行间距。如果我删除行距,则第一行和第二行的背景会相互接触,如下图所示。
我的方向正确吗?有什么我错过的吗?
【问题讨论】:
标签: android gmail android-custom-view