Пользовательский вид измерения не работает должным образом
Я создаю кастом TextView
который может рисовать текст на обоих концах, как это, и это поддерживает многострочность, так что количество текстовых представлений может быть сокращено вдвое (я получил предупреждение lint, жалуясь на 80+ представлений, и большинство представлений являются TextViews в моем макет, как имя, фамилия добавлены в макете сетки)
Пожалуйста, смотрите скриншот, это текущее состояние просмотра
Он покажет текст, когда высота будет фиксированной, я не хочу, чтобы это поведение, потому что текст справа может быть любой длины, и он должен обернуть высоту до желаемой высоты. Это переопределено onMeasure
метод
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mRightText == null) return;
initStaticLayout();
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mLayout.getHeight());
}
mLayout
это StaticLayout
private void initStaticLayout() {
if (mLayout == null) {
mLayout = new StaticLayout(mRightText, mPaint,
getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
}
}
если высота установлена wrap_content
это ничего не рисует.
Кто-нибудь может помочь мне решить эту проблему.
2 ответа
Когда я попробовал просмотр в эмуляторе, я получил это исключение, как только запускается активность,
java.lang.IllegalArgumentException: Layout: -xx < 0
это из initStaticLayout
относительно ширины
mLayout = new StaticLayout(mRightText, mPaint,
/*the error was here*/ getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
и я изменил это с getWidth()
в screenWidth
и теперь я могу обернуть высоту, независимо от того, насколько большой правильный текст. Я не знаю, почему исправление проблемы ширины решило проблему высоты, возможно, из-за исключения, макет не может генерировать предварительный просмотр.
Спасибо @pskink за совет по adb и спасибо всем
Вместо этого в xmlfile, почему вы не можете создать два текстовых представления, сохраняя layout_weight равным 1., чтобы весь экран был разделен на два равных раздела.