Рассчитать SpannableString с - PullRequest
       0

Рассчитать SpannableString с

5 голосов
/ 22 ноября 2010

Я строю текст во время выполнения, который будет помещен в TextView. Этот текст состоит из шрифтов разного размера. Я должен рассчитать ширину в пикселях этого текста. Я пытался использовать Paint.measureText, но он не учитывает разные размеры шрифтов. Как я могу рассчитать реальную ширину?

это пример:

LinearLayout text = (LinearLayout) findViewById(R.id.LinearLayout);

SpannableStringBuilder str = new SpannableStringBuilder("0123456789");
str.setSpan(new RelativeSizeSpan(2f), 3, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView tmp = new TextView(this);
tmp.setText(str,BufferType.SPANNABLE);
text.addView(tmp);

Float dim = tmp.getPaint().measureText(str, 0, str.length());

В этом примере, если я установлю относительный размер «2f» или «3f» (например), общий размер, который возвращает «MeasureText», будет таким же.

Спасибо

Ответы [ 2 ]

8 голосов
/ 16 мая 2012

Вы можете использовать staticLayout.getLineWidth(line) для вычисления ширины SpannableString. Например:

CharSequence boldText = Html.fromHtml("<b>ABCDEFG</b>HIJK");
TextPaint paint = new TextPaint();

float measureTextWidth = paint.measureText(boldText, 0 , boldText.length());

StaticLayout tempLayout = new StaticLayout(boldText, paint, 10000, android.text.Layout.Alignment.ALIGN_NORMAL, 1f, 0f, false);
int lineCount = tempLayout.getLineCount();
float textWidth =0;
for(int i=0 ; i < lineCount ; i++){
    textWidth += tempLayout.getLineWidth(i);
}

результат:

measureTextWidth = 71.0
textWidth = 77.0

BoldText шире.

0 голосов
/ 22 ноября 2010

Вы можете использовать Paint.measureText, но вам нужно правильно его настроить. Вот что я использую:

    // init helper
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setStrokeWidth(1);
    mPaint.setStrokeCap(Paint.Cap.ROUND);

    // Measure
    mPaint.setTextSize(mTextField1.getTextSize());
    mPaint.setTypeface(mTextField1.getTypeface());
    mText1TextWidth = mPaint.measureText(mTextField1.getText().toString());

BR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...