0
대체 스팬이있는 텍스트보기에서 카운트 배지와 같은 효과를 얻으려고합니다. 나는 drawable (xml에 정의 된 원)을 배경으로 사용하고 있는데, canvas.drawCircle 메소드가 작동하지 않는 것처럼 보입니다. 그러나이 드로어 블 위에 텍스트를 그리기를 원하지만, 나는 무엇을 시도하든 절대로 나타나지 않습니다. 문제가 무엇인지 알 수있는 사람이 있습니까?Android : 대체 스팬에 텍스트가 표시되지 않음
내 사용자 교체 스팬 클래스 :
public class CircleBackgroundSpan extends ReplacementSpan {
private Drawable circle;
public CircleBackgroundSpan(Drawable drawable)
{
circle = drawable;
}
@Override
public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
int textWidth = Math.round(measureText(paint, text, start, end));
return Math.max(textWidth, circle.getIntrinsicWidth());
}
@Override
public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
Rect bounds = new Rect();
circle.setBounds((int) x, top, (int) x + circle.getIntrinsicWidth(), top + circle.getIntrinsicHeight());
circle.draw(canvas);
paint.setColor(0x0000A8);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setTextAlign(Paint.Align.CENTER);
paint.setTextSize(16);
paint.getTextBounds(text.toString(), 0, text.subSequence(start, end).length(), bounds);
canvas.drawText(text, start, end, x + circle.getIntrinsicWidth()/2f , y, paint);
}
private float measureText(Paint paint, CharSequence text, int start, int end)
{
return paint.measureText(text, start, end);
}
}
사용법 :
SpannableString spannableString = new SpannableString(selected+" items selected");
String numberString = String.valueOf(selected);
spannableString.setSpan(new CircleBackgroundSpan(getResources().getDrawable(R.drawable.multiselect_circle)), 0, numberString.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
multiselect.setText(spannableString, TextView.BufferType.SPANNABLE);
그리고 결과 :이 같은 것을 얻기 위해 노력하고
:
아이디어가 있으십니까?