Обтекание изображения текстом

Рейтинг: 1Ответов: 1Опубликовано: 18.10.2014

Доброго времени суток. Возникла необходимость выполнить обтекание изображения (ImageView) текстом (TextView). Немножко погуглив, удалось найти неплохой класс, решающий мою проблему, ибо стандартными средствами ничего толкового не сделаешь. Но все-таки не все так просто. Если текст не содержит переносов строк, то все в порядке, но у меня в тексте переносов минимум 40. Таким образом, для первых строк все работает как надо, для последующих, содержащих '\n', идет отступ вообще с другого края (по умолчанию с левого, а с переносом строки - с правого). Таким образом, в строке полная каша. Прошу помочь как-то разрулить возникшую ситуацию. Заранее спасибо.

Ответы

▲ 2Принят

С двумя TextView можно проще. Т.е. один textview размещаем справа от картинки, второй - под ней. Останется только подобрать высоту, чтоб помещалось четкое количество строк (margin-ом для картинки, например).

TextView mFirst = ...
TextView mSecond = ...

mFirst.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
  @SuppressLint("NewApi")
  @Override
    public void onGlobalLayout() {
      if (Build.VERSION.SDK_INT >= 16) { // API 11
        mFirst.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      } else {
        mFirst.getViewTreeObserver().removeGlobalOnLayoutListener(this);
      }
      int h = mFirst.getHeight();
      int lh = mFirst.getLineHeight();
      int maxl = h / lh;
      if (mFirst.getLineCount() > maxl) {
        int i = mFirst.getLayout().getLineStart(maxl);
        String text = (String) mFirst.getText();
        mSecond.setText(text.substring(i));
        mFirst.setText(text.substring(0, (i == 0) ? 0 : i - 1));
      } else {
        mSecond.setText("");
      }
    }
});

ЗЫ Код выдран из разных частей проекта, возможны ошибки.