Мне нужно отобразить заголовок экрана со списком имен, разделенных запятыми. Имена могут быть короче или длиннее, но у textview есть android: maxLines = 2. Если список имен длиннее, чем textview, тогда мне нужно установить текст с «+ x More».
If » Лондон, Париж, Нью-Йорк, Сингапур, Гонконг "не могут поместиться в TextView с maxlines 2, тогда мне нужно отобразить" Лондон, Париж, Нью-Йорк +2 Больше ". Это означает, что мне нужно убедиться, что текст, а также Текст «+ x More» вписывается в TextView.
Вот что я пытаюсь сделать:
private void getCommaSeparatedTitle(final String strNames) {
title.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
title.getViewTreeObserver().removeOnGlobalLayoutListener(this);
title.setMaxLines(2);
title.setGravity(Gravity.CENTER_HORIZONTAL);
title.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.big_font));
title.measure(0, 0);
Paint paint = title.getPaint();
int textViewWidth = title.getWidth() * 2;
String[] values = strNames.split(",");
int i = 0;
StringBuilder str = new StringBuilder();
if (paint.measureText(strNames) < textViewWidth)
title.setText(strNames);
else {
String moreText = " +x More";
for (String name : values) {
String temp = str.length() > 0 ? str + ", " + name : name;
if (paint.measureText(temp + moreText) < textViewWidth) {
str.append(name);
str.append(",");
} else {
title.setText(str + " +" + (values.length - i) + " " + "More");
break;
}
i++;
}
}
}
});
}
Это определение TextView:
<com.views.textviews.CustomTextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/medium_margin"
android:gravity="center_horizontal"
android:maxLines="2"
android:textColor="@color/text_color"
android:textSize="@dimen/big_font"
android:textStyle="bold" />
Иногда я получаю правильную строку, но иногда она обрезается как
London, Paris, NewYork, Singapore, HongKong => London, "Paris, NewYork, Singap"
London, Paris, NewYork, Singapore, HongKong, Malayasia => "London, Paris, NewYork, Singapore +2mo"
Обратите внимание, что происходит не так. Я думаю, что ширина TextView не правильная, я умножил ее на title.getWidth () * 2, потому что maxLine равен 2. Также не уверен, что гравитация текста вызывает проблему.
Ниже приведены некоторые примеры этой проблемы: