Может быть, FlowTextView может решить вашу проблему. FlowTextView основан на RelativeLayout с добавленными функциями TextView, которые обертывают свой текст вокруг своих дочерних элементов.
В качестве альтернативы, если вам подходит, если TextView находится справа, а изображение - слева, например:
---------
| Image | Text that is so
--------- long that it's
wrapping around the image
вы можете попробовать LeadingMarginSpan2 :
Реализуйте его следующим образом:
public class MyLeadingMarginSpan2 implements LeadingMarginSpan.LeadingMarginSpan2 {
int lines;
int offset;
public MyLeadingMarginSpan2(int lines, int offset) {
this.lines = lines;
this.offset = offset;
}
@Override
public int getLeadingMarginLineCount() {
return lines;
}
@Override
public int getLeadingMargin(boolean first) {
return first ? offset : 0;
}
@Override
public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
}
}
и используйте его в своем коде следующим образом:
float textLineHeight = textView.getPaint().getTextSize();
int lines = (int) (imageView.getMeasuredHeight() / textLineHeight) + 1;
int offset = imageView.getMeasuredWidth();
SpannableString text = new SpannableString("Text that is so long that it's wrapping around the image");
text.setSpan(new MyLeadingMarginSpan2(lines, offset), 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(text);
Если вы хотите предоставить дополнительную резервную копию для очень старых версий Android (<2.2), вы можете взглянуть на этот ответ на аналогичный вопрос: <a href="https://stackoverflow.com/a/8463221/13792619">{ ссылка }