Пользовательский вид измерения не работает должным образом

Я создаю кастом 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., чтобы весь экран был разделен на два равных раздела.

Другие вопросы по тегам