Подогнать текст к ширине растрового изображения

Мне нужно нарисовать текст, который заполняет данный Rect() по горизонтали (только пробелы должны быть растянуты). Есть ли способы, кроме подсчета ширины каждого слова?


person styanton    schedule 04.02.2012    source источник


Ответы (2)


Да нет проблем. В вашей функции onDraw(Canvas c) используйте следующий код:

public void onDraw(Canvas canvas) {
  TextPaint mTextpaint = new TextPaint();
  mTextPaint.setAntiAlias(true);
  mTextPaint.setTextSize(14);
  mTextpaint.setColor(Color.MAGENTA);

  final String mText = "Hello World";
  final int maxTextWidth = 40;

  DynamicLayout dl = new DynamicLayout(mText, mTextPaint, 
      maxTextWidth, Layout.Alignment.ALIGN_CENTER, 1.0f, 1.0f, false);

  canvas.translate(0, 100);
  dl.draw(canvas);
}

В этом примере создается TextLayout (DynamicLayout), которому задана максимальная ширина, настроенный TextPaint и текст. Он рисует на объекте холста центрированный текст «Hello World», для получения дополнительной документации о TextLayouts вы можете использовать документацию по разработке Android;) Комментарий от меня: код примера не оптимизирован, вы можете настроить Textpaint в любой другой функции, событии Text и maxTextWidth - из-за частого использования события onDraw() лучше поместить код в другую нечасто используемую функцию, такую ​​как конструктор класса или около того.

person Andreas    schedule 04.02.2012
comment
Спасибо, например, но это не совсем то, что мне нужно. Я хочу такой же эффект, как text-align: justify в CSS. - person styanton; 04.02.2012

Просто попробуйте StaticLayout (для статического текста) или DynamicLayout (динамический текст) в вашей функции onDraw(), это текстовые макеты, которым вы можете задать максимальную ширину. Вы можете использовать это даже с TextUtils.EllipSize, чтобы вырезать текст.

person Andreas    schedule 04.02.2012