Dynami c TextView, который по возможности заполняет пробелы - PullRequest
4 голосов
/ 18 июня 2020

В android у нас есть ограничения, поэтому мы можем поместить Просмотры в начало другого Просмотры и в конец другого Просмотры

В частности, TextView, когда вы установите его конец в начало другого представления, он будет выглядеть так: -

Tex | Another View
tVi |
ew  |

Есть ли какой-нибудь макет, который поможет мне получить динамический c TextView например выше один будет выглядеть так: -

Tex | Another View
tView | Parent device border

Вот наглядный пример: -

enter image description here

Ответы [ 3 ]

0 голосов
/ 25 июня 2020

Думаю, вы можете попробовать что-то вроде этого репозитория GitHub. FlowTextView

0 голосов
/ 28 июня 2020

Здесь есть отличный ответ: stackoverflow.com / a / 27064368/3696500 Надеюсь, это поможет,

Также посмотрите https://github.com/deano2390/FlowTextView Библиотека github.

<uk.co.deanwild.flowtextview.FlowTextView
    android:id="@+id/ftv"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:padding="10dip"
            android:src="@drawable/android"/>
</uk.co.deanwild.flowtextview.FlowTextView>
0 голосов
/ 22 июня 2020

Может быть, 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">{ ссылка }

...